ใน Linux ฉันจะตัดทอนเอาต์พุตบรรทัดคำสั่งได้อย่างไร


56

หากฉันgrep -nr sumthin *อยู่ในไดเรกทอรีซอร์สโค้ดของฉันมันจะแยกบรรทัดที่ยาวมากออกจากไฟล์ JavaScript หรือ CSS แบบย่อ ฉันต้องการรับ 80 ตัวอักษรแรกต่อบรรทัด

ตัวอย่างเช่นปกติgrepให้ฉันนี้:

css/style.css:21:   behavior: url("css/iepngfix.htc")
css/style-min.css:4:.arrow1{cursor:pointer;position:absolute;left:5px;bottom:10px;z-index:13;}.arrow2{cursor:pointer;position:absolute;right:5px;bottom:10px;z-index:13;}.calendarModule{z-index:100;}.calendarFooterContainer{height:25px;text-align:center;width:100%!important;z-index:15;position:relative;font-size:15px!important;padding:-2px 0 3px 0;clear:both!important;border-left:1px solid #CCC;border-right:1px  ... etc.

แต่ฉันต้องการได้รับสิ่งนี้แทน:

css/style.css:21:   behavior: url("css/iepngfix.htc")
css/style-min.css:4:.arrow1{cursor:pointer;position:absolute;left:5px;bottom:

คำสั่ง Linux ใดที่สามารถทำได้


"minified"? นั่นหมายความว่าอย่างไร?
CarlF


ขอบคุณ ลิงก์ที่ถูกต้องคือen.wikipedia.org/wiki/Minification_%28programming%29
CarlF

ลิงก์ทั้งสองนำไปสู่หน้าเดียวกันสำหรับฉัน
Victor

คำตอบ:


80

โอ้พระเจ้าฉันลืมไปโดยสิ้นเชิงcut!

grep -nr sumthin * | cut -c -80

^ เล่นกล! > _ <


4
ไม่สามารถใช้งานได้หากเอาท์พุตหรือรหัสสีเกี่ยวข้อง ยกตัวอย่างgit log --oneline --graph --color=always | cut -c -$COLUMNS
badp

1
ฉันเข้าใจว่ามันไม่ตัดทอนตัวอักษรที่แสดงออกมา 80 ตัว แต่ก็ยังแก้ปัญหาของฉันได้: ไม่มีการพันบรรทัดดังนั้นคุณยังเห็นเฉพาะส่วนนำของแต่ละบรรทัด (ซึ่งเป็นสิ่งสำคัญในกรณีการใช้งานเฉพาะของฉันดังนั้นฉันจึง สามารถดู<file>:<linenumber>ผลลัพธ์ของgrep -n)
Nikki Erwin Ramirez

1
คอมมิชชันคอมมิชชันนานยังค่อนข้าง "ทำลาย" เอาท์พุทคำสั่งตัวอย่างของคุณ, ถ้าไม่ถูกตัดทอน git log --oneline --graph --color=always | moreจะแสดงกราฟที่ถูกขัดจังหวะด้วยข้อความที่ถูกห่อ i.imgur.com/X8G7SIV.png
Nikki Erwin Ramirez

ใช่ว่าเป็นเหตุผลที่ผม googled สำหรับคำถามนี้จะเริ่มต้นด้วย :)
badp

5
หากวัตถุประสงค์เพียงเพื่อให้สามารถมองเห็นสิ่งต่าง ๆ ได้ดี (ไม่ใช่การเปลี่ยนเส้นทางเอาต์พุตไปยังที่อื่นเพื่อใช้งาน) less -Sนั่นคือสิ่งที่คุณต้องการ เป็น-S --chop-long-linesโดยทั่วไปจะปิดการตัดบรรทัด
เอนโทรปี

5

นอกเหนือจากที่cutคุณสามารถใช้fold(และในบางกรณีfmt)
foldเป็นส่วนหนึ่งของcoreutilsแพ็คเกจ

$ echo "some very long long long text" | fold -w 5   # fold on 5 chars per line
some 
very 
long 
long 
long 
text

foldไม่ได้ตัดข้อความที่เหลือ แต่ส่งออกในบรรทัดถัดไป


ขอบคุณสำหรับสิ่งนี้สิ่งนี้อาจมีประโยชน์ในอนาคต ในกรณีของฉันฉันต้องการตัดข้อความดังนั้นfile:linenumberคำนำหน้าของgrepผลลัพธ์จึงต่อเนื่องกันเพื่อการสแกนด้วยตาง่าย
Nikki Erwin Ramirez

1

แม้ว่าจะไม่ใช่สิ่งที่คุณต้องการอย่างแน่นอน แต่คุณสามารถawkพิมพ์คอลัมน์จำนวนหนึ่งได้ คุณสามารถระบุตัวคั่นเป็น ":" ในกรณีนี้


แม้ว่าจะไม่มีตัวคั่นเฉพาะ ฉันกำลังตัดเอาต์พุตที่ความยาวเฉพาะเพื่อให้พอดีกับ 1 บรรทัดในเทอร์มินัล
Nikki Erwin Ramirez

@Nikki แล้วตัดเป็นสิ่งที่คุณต้องการ ฉันแน่ใจว่าคุณสามารถทำสิ่งที่ฉลาดด้วย awk เพื่อให้ได้สิ่งเดียวกัน แต่จริงๆแล้วการตัดนั้นง่ายกว่า ^ _-
Sardathrion
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.