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

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

3
การลบข้อความระหว่างสองสตริงที่ระบุ
ฉันมีไฟล์ดังนี้: mime PI Name: ISHO SUCCESS RATE RT, Value: 95.663826 scr PI Name: RRC Access Failures due to UU, Value: 0.13394141 prog PI Name: RRC Access Failures due to UU, Value: 0.16077702 sch PI Name: RRC Access Failures due to UU, Value: 0.11781933 ฉันต้องการที่จะลบข้อความจนถึงPI Value:ฉันเหนื่อย sed '/<PI>/,/<\/Value:>/d' ความช่วยเหลือใด ๆ

6
วิธีการรับหลายบรรทัดออกจากไฟล์โดย regex?
วิธีการรับหลายบรรทัดออกจากไฟล์โดย regex? ฉันมักจะต้องการรับหลายบรรทัด / แก้ไขหลายบรรทัดโดย regex กรณีตัวอย่าง: ฉันกำลังพยายามอ่านส่วนหนึ่งของไฟล์ XML / SGML (ไม่จำเป็นต้องมีรูปแบบที่ดีหรืออยู่ในรูปแบบที่สามารถคาดเดาได้ดังนั้น regex จะปลอดภัยกว่าตัวแยกวิเคราะห์ที่เหมาะสมนอกจากนี้ฉันอยากจะทำเช่นนี้ได้เล็กน้อย ไฟล์ที่ไม่มีโครงสร้างซึ่งรู้จักคำสำคัญเพียงบางคำ) ในเชลล์สคริปต์ (ทำงานบน Solaris และ Linux) ตัวอย่าง XML: <tag1> <tag2>bar</tag2> </tag1> <tag1> <tag2>foo</tag2> </tag1> จากนี้ฉันอยากจะอ่าน<tag1>มันถ้ามันมีfooบางแห่งในนั้น regex ที่ชอบ(<tag1>.*?foo.*?</tag1>)ควรให้ส่วนที่ถูกต้อง แต่เครื่องมือที่ชอบgrepและsedใช้ได้กับฉันในบรรทัดเดียวเท่านั้น ฉันจะได้รับ <tag1> <tag2>foo</tag2> </tag1> ในตัวอย่างนี้?
10 shell  sed  grep 

3
วิธีลบบรรทัดว่างที่เริ่มต้นจากบรรทัดที่ 5
ฉันมีสิ่งนี้: sed -i '/^$/d' temp_spec.rb ซึ่งลอกบรรทัดว่างและทำงานได้ดี ฉันจะทำให้มันใช้งานได้เฉพาะกับบรรทัดที่ 5-999 (หรือ 5 ถึงจุดสิ้นสุดของไฟล์) ฉันเหนื่อย: sed -n5,999 -i '/^$/d' temp_spec.rb sed '5,999!d/^$/d' temp_spec.rb แต่ไม่ทำงาน (ไม่มีข้อผิดพลาด)
10 sed 

4
ฉันจะเขียนซับหนึ่งซับเพื่อเพิ่มอักขระหลังจากอักขระที่สามทุกตัวได้อย่างไร
ดังนั้นฉันมีสตริงที่มีลักษณะเช่นนี้: AUGGCCAUGGCGCCCAGAACUGAGAUCAAUAGUACCCGUAUUAACGGGUGA และฉันต้องการแยกสตริงออกเป็น 3 ตัวอักษรที่คั่นด้วยเครื่องหมาย '+' AUG+GCC+AUG+GCG+CCC+AGA+ACU+GAG+AUC+AAU+AGU+ACC+CGU+AUU+AAC+GGG+UGA sedและฉันต้องการที่จะทำอย่างนั้นกับเพื่อนที่ดีของฉัน ฉันเหนื่อย cat codons | sed -r 's/([A-Z]\{3\})/\1\+/g' ... ไม่ประสบความสำเร็จ sedฉันสามารถใช้คำสั่งอะไรได้บ้าง

3
ใช้ here-doc สำหรับ `sed 'และไฟล์
ฉันต้องการใช้ here-doc สำหรับคำสั่ง sed และจัดเตรียมไฟล์ที่จะอ่านและไฟล์เอาต์พุต ฉันดูที่นี่ - เอกสารจากคู่มือการสคริปต์การทุบตีขั้นสูง แต่ไม่ได้พูดถึงสิ่งใดเกี่ยวกับอาร์กิวเมนต์ปกติในการใช้ here-doc เป็นไปได้ไหม ฉันต้องการบรรลุสิ่งต่อไปนี้: #!/bin/bash OUT=/tmp/outfile.txt IN=/my_in_file.txt sed $IN << SED_SCRIPT s/a/1/g s/test/full/g SED_SCRIPT > $OUT; ความช่วยเหลือใด ๆ ที่เป็นที่นิยมจริงๆ

5
Sed: แทนที่รูปแบบในการขึ้นบรรทัดใหม่ทุกวินาทีหรือไม่
มีวิธีบอกsedให้เปลี่ยนลวดลายในทุก ๆ วินาทีหรือไม่? หรืออย่างน้อยในทุก ๆ วินาที? (แน่นอนว่าเป็นไปได้ด้วยสคริปต์ แต่ฉันถามตัวเองว่าsedสามารถทำได้หรือไม่) แก้ไข ฉันพบ sed -e "s/pattern/replacement/g;n" แต่มันถูกแทนที่ทุกครั้งที่เกิดขึ้นไม่ใช่ครั้งที่สอง ตัวอย่าง ไฟล์อินพุต: I have a pattern in each line Also the second line has the pattern Another pattern here And -- you guess it -- a pattern ผลลัพธ์ที่ต้องการ: I have a pattern in each line Also …
10 sed  replace 

4
ลบไฟล์ที่เก่ากว่า 5 วันใน UNIX (วันที่ในชื่อไฟล์ไม่ใช่เวลาประทับ)
ฉันต้องการลบไฟล์บันทึกที่เก่ากว่า 5 วันจากไดเรกทอรี แต่การลบไม่ควรยึดตามเวลาประทับของไฟล์ มันควรจะขึ้นอยู่กับชื่อของไฟล์ สำหรับวันที่ตัวอย่างในปัจจุบันเป็น 2012/07/05 และไดเรกทอรีมี 10 ไฟล์ชื่อเช่นABC_20120430.log, ABC_20120429.log, ABC_20120502.log, ABC_20120320.logฯลฯ ฉันต้องการที่จะสามารถที่จะลบไฟล์โดยแยกวันจากชื่อของไฟล์
10 bash  sed  rm 

3
การแทนที่สตริงในไฟล์ที่มีขนาดใหญ่มาก
ฉันมี URL จำนวนมากที่ไม่มีตัวคั่นในรูปแบบเดียวกับด้านล่าง: http://example.comhttp://example.nethttp://example.orghttp://etc... ฉันต้องการให้แต่ละ URL อยู่ในบรรทัดใหม่ ฉันพยายามทำสิ่งนี้โดยแทนที่ "http: //" ด้วย "\ nhttp: //" โดยใช้ sed sed 's_http://_\nhttp://_g' urls.txt แต่เกิดข้อผิดพลาดในการแบ่งกลุ่ม (การละเมิดหน่วยความจำ) ฉันสามารถคาดเดาได้ว่าขนาดไฟล์ที่แท้จริง (เกิน 100GB) ทำให้เกิดความผิดเพี้ยนเกินขีด จำกัด ฉันสามารถแบ่งไฟล์ออกเป็นไฟล์เล็ก ๆ หลาย ๆ ไฟล์เพื่อการประมวลผลได้ แต่อินสแตนซ์ทั้งหมดของ "http: //" จะต้องถูกเก็บรักษาไว้เหมือนเดิม มีวิธีที่ดีกว่าในการทำเช่นนี้?


4
การเพิ่มบรรทัดข้อความให้กับหลาย ๆ ไฟล์
ดังนั้นฉันมีไฟล์จำนวนมากในไดเรกทอรีและฉันต้องแทรกบรรทัดข้อความลงในแต่ละไฟล์ พวกเขามีรูปแบบต่อไปนี้เป็นหลัก: <VirtualHost *:80> ServerAdmin gabe@localhost DocumentRoot /var/www/test1 ServerName test1.local ServerAlias test1 <Directory "/var/www/test1"> Options All AllowOverride All </Directory> </VirtualHost> และฉันต้องการแทรกบรรทัดก่อนปิด </ VirtualHost>แท็ก ข้อสันนิษฐานแรกของฉันคือฉันควรจะสามารถทำสิ่งนี้ด้วย sed อาจจับคู่และแทนที่แท็กนั้น ฉันจะเริ่มลองตอนนี้ แต่ถ้าใครมีวิธีการทำเช่นนี้อยู่ฉันก็อยากได้ยิน

3
รับส่วนสุดท้ายของสตริงหลังจากยัติภังค์
มีบรรทัดคำสั่งง่าย ๆ ในการแยกส่วนสุดท้ายของสตริงที่คั่นด้วยเครื่องหมายขีดคั่นหรือไม่ เช่นผมต้องการที่จะแยกจาก123foo-bar-123

5
ลบสตริงนำในทุบตี
ฉันมีสตริงเหมือนrev00000010และฉันต้องการเพียงหมายเลขสุดท้าย 10 ในกรณีนี้ ฉันได้ลองสิ่งนี้แล้ว: TEST='rev00000010' echo "$TEST" | sed '/^[[:alpha:]][0]*/d' echo "$TEST" | sed '/^rev[0]*/d' ทั้งสองส่งคืนอะไรแม้ว่า regex ดูเหมือนจะถูกต้อง (ลองกับregexr )

3
แทนที่สตริงด้วยดัชนีตามลำดับ
ใครสามารถแนะนำวิธีที่สง่างามเพื่อให้บรรลุนี้ การป้อนข้อมูล: test instant () test instant () ... test instant () //total 1000 lines ผลลัพธ์ควรเป็น: test instant1 () test instant2 () test instant1000() บรรทัดว่างอยู่ในไฟล์อินพุตของฉันและมีไฟล์จำนวนมากภายใต้ไดเรกทอรีเดียวกันที่ฉันต้องดำเนินการในครั้งเดียว ฉันพยายามทำสิ่งนี้เพื่อแทนที่ไฟล์จำนวนมากใน dir เดียวกันและไม่ทำงาน for file in ./*; do perl -i -000pe 's/instance$& . ++$n/ge' "$file"; done ข้อผิดพลาด: Substitution replacement not terminated at -e line 1. …

2
คำสั่ง sed พื้นฐานสำหรับไฟล์บรรทัดเดียวขนาดใหญ่: ไม่สามารถจัดสรรหน่วยความจำใหม่ได้
ฉันมีไฟล์ข้อความ 250 MB ทั้งหมดนี้อยู่ในบรรทัดเดียว ในไฟล์นี้ฉันต้องการแทนที่aตัวละครด้วยbตัวอักษร: sed -e "s/a/b/g" < one-line-250-mb.txt มันล้มเหลวด้วย: sed: couldn't re-allocate memory สำหรับฉันดูเหมือนว่างานประเภทนี้สามารถดำเนินการแบบอินไลน์โดยไม่ต้องจัดสรรหน่วยความจำมาก มีเครื่องมือที่ดีกว่าสำหรับงานหรือวิธีการใช้ที่ดีกว่าsedหรือไม่? GNU sed เวอร์ชั่น 4.2.1 Ubuntu 12.04.2 LTS RAM 1 GB

2
จะเปลี่ยนเครื่องหมายคำพูดในไฟล์ด้วย sed ได้อย่างไร?
ฉันมีไฟล์ที่มี xml หลายบรรทัด ฉันต้องการแทนที่บางส่วนของไฟล์ บางส่วนของไฟล์มีเครื่องหมายอัญประกาศ ( ") ซึ่งฉันต้องการแทนที่ ฉันพยายามหลีกเลี่ยงเครื่องหมายคำพูดด้วย\แต่ฉันไม่คิดว่ามันจะทำงานได้ตามผลลัพธ์ของไฟล์ของฉัน นี่คือตัวอย่างของคำสั่ง sed ของฉัน: sed -e "s/\"text\"/'text'/ig" file.xml > temp.tmp นี่เป็นวิธีที่คุณหลีกเลี่ยงเครื่องหมายคำพูดในคำสั่ง sed หรือฉันกำลังทำอะไรผิดหรือเปล่า?
10 sed 

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