คำถามติดแท็ก sed

sed เป็นตัวแก้ไขสตรีมบรรทัดคำสั่งสำหรับการกรองและแปลงข้อความ

6
จะลบบรรทัดที่สั้นกว่า XY ได้อย่างไร
ฉันพบคำถามเกี่ยวกับวิธีลบบรรทัดที่ยาวกว่า 2048 ตัวอักษร: วิธีลบบรรทัดถ้ายาวกว่า XY ถาม:แต่ฉันจะลบเส้นที่สั้นกว่าตัวอักษร 4 ตัวได้อย่างไร ดังนั้นลบบรรทัดที่มีความยาว 1 หรือ 2 หรือ 3 ไฟล์ อัปเดต: ขอบคุณสำหรับคำตอบที่ดีมากมาย แต่ฉันสามารถทำเครื่องหมายว่าตกลงเท่านั้น

12
ฉันจะเขียนไปยังบรรทัดที่สองของไฟล์จากบรรทัดคำสั่งได้อย่างไร
ฉันมีโปรแกรมภายนอกที่สร้างไฟล์เอาต์พุต (เป็นไปได้มากถึง 20K บรรทัด) ฉันต้องการแทรกบรรทัดใหม่ระหว่างบรรทัดที่ 1 ที่มีอยู่และบรรทัดที่ 2 ฉันดู awk และ sed - ฉันใช้ liners หนึ่งตัวในแต่ละข้อพอสมควร - แต่ฉันไม่สามารถหาสวิตช์ที่ถูกต้องได้ ทำเช่นนี้.

3
การใช้ sed เพื่อระบายสีเอาต์พุตจากคำสั่งบน solaris
ฉันมีสคริปต์ ksh ที่ต้องทำงานกับทั้ง linux และ solaris ฉันกำลังพยายามระบายสีผลลัพธ์ของคำสั่งเฉพาะ ใช้งานได้กับ linux (โดยเฉพาะ RHEL6) แต่ไม่ใช้กับ Solaris (SunOS 5.10) คำสั่งบน linux (ผลลัพธ์ "test" เป็นสีแดงที่ถูกต้อง): [amartin@linuxbox:~]$ echo "test" | sed 's,.*,\x1B[31m&\x1B[0m,' test คำสั่งเกี่ยวกับโซลาริส (ผลลัพธ์ "การทดสอบ" ไม่มีสี) [amartin@sunbox:~]$ echo "test" | sed 's,.*,\x1B[31m&\x1B[0m,' x1B[31mtestx1B[0m มีวิธีการสร้างคำสั่งนี้ว่าเอาท์พุทเป็นสีแดงโดยไม่ต้องรหัสดิบในการส่งออก? ฉันไม่สามารถเปลี่ยนคำสั่ง 'echo' ได้เพราะนั่นเป็นเพียงการกรอกคำสั่งที่ฉันใช้อยู่

6
วิธีเพิ่มการขึ้นบรรทัดใหม่ก่อนขึ้นบรรทัดใหม่ทุกครั้ง
ฉันมีไฟล์ที่ใช้\nสำหรับบรรทัดใหม่เท่านั้น แต่ฉันต้องการให้มี\r\nสำหรับแต่ละบรรทัดใหม่ ฉันจะทำสิ่งนี้ได้อย่างไร ตัวอย่างเช่นฉันแก้ไขในการใช้ Vim :%s/\n/\r\n/gแต่ฉันต้องการใช้สคริปต์หรือแอปพลิเคชันบรรทัดคำสั่ง ข้อเสนอแนะใด ๆ ฉันพยายามค้นหาสิ่งนี้ด้วยsedหรือgrepแต่ฉันสับสนทันทีโดยวิธีแก้ปัญหาลำดับหนี (ฉันเป็นสีเขียวเล็กน้อยด้วยคำสั่งเหล่านี้) หากสนใจแอปพลิเคชันจะเกี่ยวข้องกับคำถาม / คำตอบของฉันที่นี่
28 sed  grep  newlines 

3
sed -i '1d' ทำอะไร
ฉันเข้าใจว่าsedเป็นคำสั่งในการจัดการไฟล์ข้อความ จาก Googling ของฉันดูเหมือนว่าจะ-iทำการดำเนินการกับไฟล์เองถูกต้องหรือไม่ เกี่ยวกับ'1d'อะไร
28 sed 

4
วิธีการ“ grep” สำหรับความยาวบรรทัดในช่วงที่กำหนด?
หมายเหตุ:คำถามนี้เป็นส่วนเติมเต็มของคำถาม & คำตอบ: วิธีการ "grep" สำหรับความยาวบรรทัด * ไม่ใช่ * ในช่วงที่กำหนด? ฉันต้องได้รับเพียงบรรทัดจาก textfile (wordlist, คั่นด้วยขึ้นบรรทัดใหม่) ที่มีช่วงความยาวต่ำสุดหรือเท่ากับ 3 อักขระ แต่ไม่เกินหรือเท่ากับ 10 ตัวอย่าง: INPUT: egyezményét megkíván ki alma kevesen meghatározó เอาท์พุท: megkíván alma kevesen คำถาม:ฉันจะทำสิ่งนี้ได้bashอย่างไร
28 bash  sed  grep  perl 


5
ลบช่วงของบรรทัดด้านบนรูปแบบด้วย sed (หรือ awk)
ฉันมีรหัสต่อไปนี้ที่จะลบบรรทัดที่มีรูปแบบbananaและ 2 บรรทัดหลังจากนั้น: sed '/banana/I,+2 d' file จนถึงตอนนี้ดีมาก! แต่ฉันต้องการมันเพื่อลบ 2 บรรทัดก่อนหน้า bananaแต่ฉันไม่สามารถรับมันด้วย "เครื่องหมายลบ" หรืออะไรก็ตาม (คล้ายกับสิ่งที่grep -v -B2 banana fileควรทำ แต่ไม่ได้ทำ): teresaejunior@localhost ~ > LC_ALL=C sed '-2,/banana/I d' file sed: invalid option -- '2' teresaejunior@localhost ~ > LC_ALL=C sed '/banana/I,-2 d' file sed: -e expression #1, char 16: unexpected `,' teresaejunior@localhost …

5
การสลับ Regex / หรือโอเปอเรเตอร์ (foo | bar) ใน GNU หรือ BSD Sed
ฉันไม่สามารถทำงานได้ เอกสารของ GNU sed บอกว่าจะหลบหนีไปป์ แต่นั่นไม่ได้ผลหรือใช้ไพพ์แบบตรงโดยไม่ต้องหลบหนี เพิ่ม parens ทำให้ไม่มีความแตกต่าง $ echo 'cat dog pear banana cat dog' | sed 's/cat|dog/Bear/g' cat dog pear banana cat dog $ echo 'cat dog pear banana cat dog' | sed 's/cat\|dog/Bear/g' cat dog pear banana cat dog

11
จะต้องมีวิธีที่ดีกว่าในการแทนที่บรรทัดใหม่เดียวเท่านั้นหรือ
ฉันติดนิสัยการเขียนหนึ่งบรรทัดต่อประโยคเพราะปกติแล้วฉันจะรวบรวมสิ่งต่าง ๆ ให้กับ LaTex หรือฉันกำลังเขียนในรูปแบบอื่นที่มีการละเว้นบรรทัด ฉันใช้บรรทัดว่างเพื่อระบุจุดเริ่มต้นของย่อหน้าใหม่ ตอนนี้ฉันมีไฟล์ที่เขียนในลักษณะนี้ซึ่งฉันต้องการส่งเป็นข้อความธรรมดา ฉันต้องการที่จะลบ linebreaks เดียวทั้งหมด แต่ปล่อยให้ linebreaks สองครั้งเหมือนเดิม นี่คือสิ่งที่ฉันทำ: sed 's/$^/NEWLINE/' file.txt | awk '{printf "%s ",$0}' | sed 's/NEWLINE/\n\n/g' > linebreakfile.txt สิ่งนี้แทนที่บรรทัดว่างด้วยข้อความบางอย่างที่ฉันมั่นใจว่าจะไม่ปรากฏในไฟล์: NEWLINEจากนั้นมันจะกำจัดตัวแบ่งบรรทัดทั้งหมดด้วย awk (ฉันพบเคล็ดลับในบางเว็บไซต์) จากนั้นมันจะแทนที่NEWLINEs ด้วยบรรทัดที่จำเป็นสองบรรทัด . ดูเหมือนว่าจะเป็นวิธีที่ยืดยาวในการทำสิ่งที่เรียบง่าย มีวิธีที่ง่ายกว่านี้ไหม? นอกจากนี้หากมีวิธีการแทนที่ช่องว่างหลาย ๆ ช่อง (ซึ่งบางครั้งอาจคืบไปด้วยเหตุผลบางอย่าง) ด้วยช่องว่างเดียวนั่นก็จะดีเช่นกัน ฉันใช้ emacs ดังนั้นหากมีเคล็ดลับเฉพาะของ emac ที่ดี แต่ฉันอยากเห็นรุ่นที่บริสุทธิ์หรือรุ่น awk ที่บริสุทธิ์

7
วิธีการเลือกการเกิดขึ้นครั้งแรกระหว่างสองรูปแบบรวมถึงพวกเขา
ฉันจะเลือกสิ่งที่เกิดขึ้นครั้งแรกระหว่างสองรูปแบบรวมถึงพวกเขา ควรใช้หรือsedawk ฉันมี: text something P1 something content1 content2 something P2 something text something P1 something content3 content4 something P2 something text ฉันต้องการเกิดขึ้นครั้งแรกของเส้นระหว่าง P1 และ P2 (รวมถึงสาย P1 และสาย P2): something P1 something content1 content2 something P2 something

1
จะเปลี่ยนวงเล็บซ้ายด้วย sed ได้อย่างไร?
ฉันต้องแทนที่(ด้วยอักขระบางตัวในไฟล์ของฉันและฉันไม่สามารถทำได้ \(ถูกนำมาใช้ในการจัดกลุ่มใน sed และเมื่อฉันใช้\\(กับ sed มันได้รับการรักษาเป็นตัวละครที่ไม่ได้เป็นเพียงแค่\( (ดูเหมือนเป็นเรื่องยากสำหรับฉัน
27 sed 

3
กลุ่มจับภาพไม่ทำงาน
[0-9]+\.[0-9]+\.[0-9]ฉันมีสตริงของรูปแบบที่ ฉันต้องการแยกตัวเลขตัวแรกตัวที่สองและที่สามแยกจากกัน ตามที่ฉันเข้าใจแล้วกลุ่มการจับกุมควรมีความสามารถในเรื่องนี้ ฉันควรจะสามารถใช้sed "s/\([0-9]*\)/\1/gเพื่อรับหมายเลขแรกsed "s/\([0-9]*\)/\2/gรับหมายเลขที่สองและsed "s/\([0-9]*\)/\3/gเพื่อรับหมายเลขที่สาม ในแต่ละกรณีฉันได้รับข้อความทั้งหมด ทำไมสิ่งนี้จึงเกิดขึ้น
27 sed 

8
วิธี grep-inverse-match และแยกบรรทัด“ before” และ“ after”
พิจารณาไฟล์ข้อความด้วยรายการต่อไปนี้: aaa bbb ccc ddd eee fff ggg hhh iii ด้วยรูปแบบ (เช่นfff) ฉันต้องการ grep ไฟล์ด้านบนเพื่อให้ได้ผลลัพธ์: all_lines except (pattern_matching_lines U (B lines_before) U (A lines_after)) ตัวอย่างเช่นถ้าB = 2และA = 1เอาต์พุตที่มี pattern = fffควรเป็น: aaa bbb ccc hhh iii ฉันจะทำสิ่งนี้กับ grep หรือเครื่องมือบรรทัดคำสั่งอื่น ๆ ได้อย่างไร หมายเหตุเมื่อฉันลอง: grep -v 'fff' -A1 -B2 file.txt ฉันไม่ได้สิ่งที่ฉันต้องการ …

9
ต้องการทดแทนสิ่งแรกที่เกิดขึ้นกับ sed
ไฟล์ต้นฉบับ claudio antonio claudio michele ฉันต้องการเปลี่ยนเฉพาะการเกิดขึ้นครั้งแรกของ "claudio" กับ "claudia" ดังนั้นผลลัพธ์ของไฟล์ claudia antonio claudio michele ฉันเหนื่อย sed -e '1,/claudio/s/claudio/claudia/' nomi แต่ดำเนินการทดแทนทั่วโลกทำไม?
26 sed 

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