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

"sed" ("stream editor") เป็นยูทิลิตี Unix ที่แยกวิเคราะห์และแปลงไฟล์ข้อความ

4
วิธีการจับคู่ช่องว่างใน sed?
ฉันจะจับคู่ whitespace ใน sed ได้อย่างไร ในข้อมูลของฉันฉันต้องการจับคู่ช่องว่างที่ตามมาทั้งหมด 3 ตัว (ช่องว่างแท็บ) และแทนที่ด้วยช่องว่าง 2 ช่อง สิ่งนี้สามารถทำได้?
218 sed  whitespace 

6
ใช้การสลับ“ |” ใน regex ของ sed
ฉันใช้ sed รุ่น GNU sed เวอร์ชั่น 4.2.1 ฉันต้องการใช้ตัวเลือก "|" สัญลักษณ์ในนิพจน์ย่อย ตัวอย่างเช่น : echo "blia blib bou blf" | sed 's/bl\(ia|f\)//g' ควรกลับมา " blib bou " แต่มันกลับมา "blia blib bou blf". ฉันจะได้ผลลัพธ์ที่คาดหวังได้อย่างไร
78 regex  sed 

3
วิธีจับคู่ตัวเลขตามด้วยจุดโดยใช้ sed?
ฉันพยายามใช้sedเพื่อแทนที่รูปแบบทั้งหมดด้วยตัวเลขตามด้วยจุด (เช่น3., 355.) ทันทีด้วยสตริงว่าง ดังนั้นฉันลอง: sed 's/\d+\.//g' file.txt แต่มันไม่ทำงาน ทำไมถึงเป็นอย่างนั้น?
76 regex  sed 

10
การลบรหัสสี ANSI ออกจากสตรีมข้อความ
ตรวจสอบผลลัพธ์จาก perl -e 'use Term::ANSIColor; print color "white"; print "ABC\n"; print color "reset";' ในเท็กซ์เอดิเตอร์ (เช่นvi) แสดงสิ่งต่อไปนี้: ^[[37mABC ^[[0m เราจะลบรหัสสี ANSI ออกจากไฟล์เอาต์พุตได้อย่างไร ฉันคิดว่าวิธีที่ดีที่สุดคือการส่งออกท่อผ่านตัวแก้ไขสตรีม ต่อไปนี้ใช้ไม่ได้ perl -e 'use Term::ANSIColor; print color "white"; print "ABC\n"; print color "reset";' | perl -pe 's/\^\[\[37m//g' | perl -pe 's/\^\[\[0m//g'
73 regex  sed  perl  awk 

10
การทดแทนในไฟล์ข้อความ ** ที่ไม่มี ** การแสดงออกปกติ
ฉันต้องการแทนที่ข้อความภายในไฟล์ข้อความด้วยการแทนที่ โดยปกติฉันจะทำอะไรเช่น sed -i 's/text/replacement/g' path/to/the/file ปัญหาคือทั้งสองtextและreplacementเป็นสตริงที่ซับซ้อนที่มีเครื่องหมายขีดกลาง, เครื่องหมายทับ, blackslashes, คำพูดและอื่น ๆ ถ้าฉันหลบหนีอักขระที่จำเป็นทั้งหมดภายในtextสิ่งนั้นจะกลายเป็นอ่านไม่ได้ ในขณะที่ฉันไม่ต้องการพลังของการแสดงออกปกติ: ฉันแค่ต้องการแทนที่ข้อความอย่างแท้จริง มีวิธีการแทนที่ข้อความโดยไม่ใช้นิพจน์ทั่วไปด้วยคำสั่ง bash หรือไม่? มันค่อนข้างจะเป็นเรื่องเล็กน้อยที่จะเขียนสคริปต์ที่ทำสิ่งนี้ แต่ฉันคิดว่าควรจะมีบางสิ่งอยู่แล้ว
68 bash  regex  sed  text-editing 

7
วิธีเพิ่มข้อความลงในชื่อไฟล์เป็นอย่างไร?
ช่วยบอกว่าฉันมีไดเรกทอรีที่เต็มไปด้วย.mdไฟล์ทั้งหมดที่มีชื่อต่าง ๆ ช่วยบอกว่าฉันต้องการเติม "ข้อความ" ไว้ที่ด้านหน้าของชื่อไฟล์แต่ละชื่อ ดังนั้นสำหรับตัวอย่างเช่นไฟล์a.md, b.mdและc.mdจะกลายเป็นtest - a.md, และtest - b.mdtest - c.md ฉันจะทำสิ่งนี้ผ่านบรรทัดคำสั่งได้อย่างไร

5
บรรทัดใหม่ใน sed บน Mac OS X
ฉันพบว่า\nใช้งานไม่ได้ในระบบปฏิบัติการภายใต้ Mac OS X โดยเฉพาะฉันต้องการแบ่งคำออกเป็นหลายช่อง: # input foo bar ฉันใช้, echo "foo bar" | sed 's/ /\n/' แต่ผลที่ได้คือโง่\nไม่หนี! foonbar หลังจากที่ฉันปรึกษากับ google ฉันพบวิธีแก้ปัญหา : echo 'foo bar' | sed -e 's/ /\'$'\n/g' หลังจากอ่านบทความฉันยังไม่เข้าใจความ\'$'\n/g'หมาย บางคนสามารถอธิบายให้ฉันหรือถ้ามีวิธีอื่นที่จะทำ? ขอบคุณ!
44 macos  mac  bash  regex  sed 

4
วิธีการใช้ sed เพื่อลบไบต์ว่าง?
อะไรคือsedคาถาที่จะลบไบต์ null จากไฟล์หรือไม่? ฉันกำลังพยายาม: s/\000//g แต่นั่นคือการแยกสตริงของศูนย์ s/\x00//g ดูเหมือนว่าจะไม่มีผลกระทบ ฉันพยายามทำสิ่งนี้ในsedสคริปต์ดังนั้นฉันจึงไม่แน่ใจว่าechoกลอุบายจะได้ผล
37 sed 

8
sed: วิธีเปลี่ยน line ถ้าพบหรือต่อท้ายไฟล์ถ้าไม่พบ?
ด้วยอินพุตไฟล์เดียวที่มีความคิดเห็น (ขึ้นต้นด้วย #) และ VARIABLE = บรรทัดค่าเป็นไปได้ที่จะแทนที่ค่าสำหรับตัวแปรเดี่ยวหากพบและมิฉะนั้นต่อท้ายคู่ท้ายไฟล์ถ้าไม่พบ? วิธีการปัจจุบันของฉันทำงานโดยการลบในรอบแรกจากนั้นต่อท้ายไฟล์ในรอบที่สอง แต่วิธีนี้ทำให้การเรียงลำดับบรรทัดยุ่งเหยิง (และเป็นสองคำสั่งต่างกัน): sed -r "/^FOOBAR=.*$/d" -i samefile && sed -r "$ a\FOOBAR=newvalue" -i samefile อย่างไรก็ตามมีให้ทำเช่นนี้คือ รักษาคำสั่งซื้อในบรรทัด sed เดียวหรือไม่ หากยูทิลิตี้อื่น (awk, ... ) ทำสิ่งนี้ฉันจะพามันไปนอน
34 linux  command-line  sed  awk 

3
วิธีใช้ 'sed' กับ piping
ฉันต้องการแทนที่สตริงที่ส่งออกจากgrepฉันมี: $ npm info webpack | grep version มันเอาท์พุทฉัน $ version: '2.1.0-beta.12', แต่ฉันต้องการ: $ 2.1.0-beta.12 ดังนั้นฉันคิดว่าฉันอาจประสบความสำเร็จในการใช้sedและแทนที่วัสดุพิมพ์ที่ไม่จำเป็น แต่นี่เป็นส่วนที่ยากสำหรับฉัน: $ npm info webpack | grep version: | sed s/version: / sed: -e expression #1, char 10: unterminated `s' command จะบรรลุเป้าหมายได้อย่างไร
34 bash  grep  sed 

12
ลบสองบรรทัดสุดท้ายของไฟล์ข้อความที่มีขนาดใหญ่มากอย่างมีประสิทธิภาพ
ฉันมีไฟล์ที่มีขนาดใหญ่มาก (~ 400 GB) และฉันต้องลบ 2 บรรทัดสุดท้ายออกจากไฟล์ ฉันพยายามใช้sedแต่มันวิ่งไปหลายชั่วโมงก่อนจะยอมแพ้ มีวิธีที่รวดเร็วในการทำเช่นนี้หรือฉันติดอยู่กับsed?

3
วิธีการแทนที่ line ในไฟล์ด้วย pattern ด้วย sed?
ฉันกำลังอ่านเอกสารจำนวนมากเกี่ยวกับ sed และยังคงนิ่งงันในกรณีการใช้งานเฉพาะของฉัน ฉันต้องการแทนที่บรรทัดนี้ในไฟล์ conf ด้วยบรรทัดของฉันเอง: แทนที่บรรทัดนี้: #maxmemory <bytes> ด้วย: maxmemory 26gb นี่คือสิ่งที่ฉันพยายาม: sed s / maxmemory. * bytes. * / maxmemory 26gb / /etc/redis/redis.conf ฉันได้รับข้อผิดพลาด: sed: -e นิพจน์ # 1, ถ่าน 30: คำสั่ง `s 'ที่ไม่ถูกทำลาย ซึ่งทำให้ฉันตกใจเพราะฉันไม่รู้ว่ามันหมายถึงอะไร ดังนั้นคำถามของฉันคือ: ฉันจะทำสิ่งที่ฉันต้องการให้สำเร็จได้อย่างไร ข้อผิดพลาดนั้นหมายความว่าอย่างไร (ดังนั้นฉันสามารถเรียนรู้จากมัน)

6
วิธีรับ pid ของกระบวนการที่กำลังรันโดยใช้คำสั่งเดียวที่แยกเอาต์พุตของ ps
คำถามนี้ถูกโยกย้ายจาก Stack Overflow เพราะสามารถตอบได้ใน Super User อพยพ 7 ปีที่ผ่านมา ฉันกำลังมองหาบรรทัดเดียวที่คืนค่า pid ของกระบวนการทำงาน ปัจจุบันฉันมี: ps -A -o pid,cmd|grep xxx|head -n 1 pid, commandและส่งกลับกำปั้น ฉันต้องการเฉพาะหมายเลขแรกจากผลลัพธ์และละเว้นส่วนที่เหลือ ฉันคิดว่าsedหรือawkจะช่วยที่นี่ แต่ประสบการณ์ของฉันกับพวกเขามี จำกัด นอกจากนี้ยังมีปัญหาอื่นมันจะคืนค่า pid ของ grep หาก xxx ไม่ทำงาน เป็นเรื่องสำคัญมากที่จะมีบรรทัดเดียวเพราะฉันต้องการนำเอาท์พุทกลับมาใช้เพื่อทำอย่างอื่นเช่นฆ่ากระบวนการนั้น
22 bash  sed  awk  pid 

17
แสดงรายการเฉพาะชื่ออุปกรณ์ของอินเทอร์เฟซเครือข่ายที่มีทั้งหมด
ฉันต้องการรับรายการ Network-Device Names ที่มีอยู่ทั้งหมดบนเซิร์ฟเวอร์ Linux ของฉัน ฉันคิดว่า ifconfig จะทำงานอย่างไรก็ตาม ifconfig สร้างผลลัพธ์ค่อนข้างมาก: eth0 Link encap:Ethernet Hardware Adresse 08:00:27:fc:5c:98 inet Adresse:192.168.2.222 Bcast:192.168.2.255 Maske:255.255.255.0 inet6-Adresse: fe80::a00:27ff:fefc:5c98/64 Gültigkeitsbereich:Verbindung UP BROADCAST RUNNING MULTICAST MTU:1500 Metrik:1 RX packets:329 errors:0 dropped:0 overruns:0 frame:0 TX packets:177 errors:0 dropped:0 overruns:0 carrier:0 Kollisionen:0 Sendewarteschlangenlänge:1000 RX bytes:41496 (40.5 KiB) TX bytes:32503 …
20 linux  networking  grep  sed  cat 

2
แก้ไขบรรทัดแรกของไฟล์ข้อความขนาดใหญ่
ฉันมีไฟล์ข้อความขนาดใหญ่มากเกินไปที่จะทำเพจทั้งหมดในหน่วยความจำ สิ่งที่ฉันต้องทำเกี่ยวกับไฟล์ข้อความนี้คือแก้ไขบรรทัดแรก (เป็นไฟล์ CSV และฉันต้องเปลี่ยนชื่อ) มีวิธีง่ายๆที่ฉันสามารถทำได้ในทุบตี?
16 linux  bash  grep  sed  textfiles 

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