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

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

2
ทำไม '[az] *' ตรงกับสตริงที่ไม่ใช่ตัวอักษร?
ฉันมีไฟล์ที่alphanumมีสองบรรทัดเหล่านี้: 123 abc this is a line ฉันสับสนว่าทำไมเมื่อฉันรันsed 's/[a-z]*/SUB/' alphanumฉันจะได้ผลลัพธ์ต่อไปนี้: SUB123 abc SUB is a line ผมคาดหวังว่า: 123 SUB SUB is a line ฉันพบวิธีแก้ไข (ใช้sed 's/[a-z][a-z]*/SUB/'แทน) แต่ฉันไม่เข้าใจว่าทำไมมันถึงใช้งานได้และของฉันก็ใช้ไม่ได้ คุณช่วยได้ไหม

3
วิธีการจับภาพที่อยู่ IP แรกจากคำสั่ง ifconfig?
วิธีการจับที่อยู่ IP แรกที่มาจากifconfigคำสั่ง? ifconfig -a enw178032: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 100.14.22.12 netmask 255.255.0.0 broadcast 100.14.255.255 inet6 fe80::250:56ff:fe9c:158a prefixlen 64 scopeid 0x20<link> ether 00:10:56:9c:65:8a txqueuelen 1000 (Ethernet) RX packets 26846250 bytes 12068811576 (11.2 GiB) RX errors 0 dropped 58671 overruns 0 frame 0 TX packets 3368855 bytes 1139160934 (1.0 GiB) TX …
9 linux  bash  awk  sed  ifconfig 

5
ลบรายการที่ซ้ำตามค่าของคอลัมน์อื่น
ฉันมีไฟล์ต่อไปนี้: AA,true AA,false BB,false CC,false BB,true DD,true trueฉันพยายามที่จะมองหาที่ซ้ำกันและลบบรรทัดที่มีค่าเท่ากับคอลัมน์ ตามที่ควรเป็น: AA,false BB,false CC,false DD,true

5
awk sed ถ้ามีคำสั่ง
ฉันกำลังพยายามเพิ่ม 0 ถึงจุดเริ่มต้นหากมี "" ที่อักขระที่ 2 ของบรรทัดนั้น ฉันไม่สามารถรวมสองสิ่งนี้เข้าด้วยกันได้ awk '{ print substr( $0, 2, 1 ) }' file.txt แสดงตัวอักษรที่สอง sed -ie "s/.\{0\}/0/" file.txt เพิ่มศูนย์ถึงจุดเริ่มต้น ควรมี "ถ้าอักขระตัวที่สองคือจุด" ไฟล์ตัวอย่าง: 1.02.2017 23:40:00 10.02.2017 23:40:00 สุดท้าย: 01.02.2017 23:40:00 10.02.2017 23:40:00

1
วิธีรับแถวที่คอลัมน์ n ประกอบด้วยคอลัมน์ mth
ฉันมีไฟล์ CSV ที่มีโดเมนและเว็บเมลเช่นนี้ site1.com,mail.site1.com site2.com,testmail.com site3.com,mx.site3.com site4.com,smtp.site4.com site5.com,foomail.com site6.com,barmail.com site7.com,webmail.site7.com site8.com,01mx.site8.com site9.com,foobarmail.com site10.com,mx-smtp222.site10.com ฉันต้องการรับแถวที่คอลัมน์เว็บเมลมีคอลัมน์โดเมนของแถวเดียวกัน สำหรับตัวอย่างข้างต้นผลลัพธ์ควรเป็น: site1.com,mail.site1.com site3.com,mx.site3.com site4.com,smtp.site4.com site7.com,webmail.site7.com site8.com,01mx.site8.com site10.com,mx-smtp222.site10.com

5
แก้ไขค่าในไฟล์ txt ด้วยคำสั่ง sed / awk / grep
เป็นเวลา 5 ปีที่ฉันใช้สถานีอากาศ La Crosse WS2350 ข้อมูลจากสถานีตรวจอากาศถูกประมวลผลด้วย open2300 บน RPI มันใช้งานได้ดีมาก อย่างไรก็ตามข้อมูลอุณหภูมิเป็นเท็จ (เซ็นเซอร์) ข้อมูลอุณหภูมิลดลง 1 ° C เนื่องจากฉันไม่สามารถปรับเทียบเซ็นเซอร์ได้ฉันต้องการเปลี่ยนค่าอุณหภูมิจากไฟล์ที่แยกจากสถานีตรวจอากาศ ไฟล์ข้อความนี้ (current.txt) ประกอบด้วย: Date 2016-Dec-03 Time 10:30:29 Ti 11.9 Timin 11.6 Timax 27.7 TTin 10:34 DTimin 2016-01-19 TTimax 00:44 DTimax 2016-08-28 To -2.4 Tomin -4.8 Tomax 37.4 TTomin 06:46 DTomin 2016-02-18 TTomax …

4
วิธีการพิมพ์บรรทัดที่ 15 และ 25 ของแต่ละ 50 บรรทัด
ฉันมีไฟล์ขนาดใหญ่และฉันต้องการพิมพ์จากแต่ละลำดับ 50 บรรทัดที่15และวันที่ 25เส้น sed -n '15,25p' inputfile วิธีแก้ไขคำสั่งนี้เพื่อพิมพ์เฉพาะบรรทัดที่ 15 และ 25 และวนรอบแต่ละ 50 บรรทัดในไฟล์

2
Grep เริ่มต้นจากข้อความคงที่จนกระทั่งบรรทัดว่างแรก
ฉันมีไฟล์prova.txtเช่นนี้: Start to grab from here: 1 fix1 fix2 fix3 fix4 random1 random2 random3 random4 extra1 extra2 bla Start to grab from here: 2 fix1 fix2 fix3 fix4 random1546 random2561 extra2 bla bla Start to grab from here: 1 fix1 fix2 fix3 fix4 random1 random22131 และฉันต้อง grep out จาก "Start …

3
แทนที่การเว้นวรรคสองครั้งทั้งหมดหลังจากสิ้นสุดประโยคด้วยช่องว่างเดียว
ฉันติดอยู่รวมทั้งการแสดงออกปกติด้วยคำสั่ง sed ถาม:ฉันต้องการแทนที่การเว้นวรรคสองครั้งหลังจากสิ้นสุดประโยคด้วยการเว้นวรรคหนึ่งครั้ง นี่คือสิ่งที่ฉันทำ: sed 's/^ $/^$/' file และมันไม่ได้แทนที่ช่องว่างสองช่องด้วยช่องว่างหนึ่งช่องหลังจากประโยคสิ้นสุด เอาท์พุทที่ฉันได้รับ: This is the output. Hello Hello ผลลัพธ์ที่ฉันต้องการ: This is the output. Hello Hello

2
หากต้องการหาบรรทัดที่ถูกต้องลองเปลี่ยนเนื้อหาแล้วใส่กลับเข้าไปในไฟล์ต้นฉบับหรือไม่
ฉันพยายามที่จะเปลี่ยนคำเดียวในบรรทัดที่ระบุในไฟล์ แต่ฉันมีปัญหาในการเชื่อมต่อทั้งหมดเข้าด้วยกัน โดยพื้นฐานแล้วในหนึ่งบรรทัดในไฟล์ของฉันมีคำสำคัญ 'firmware_revision' และในบรรทัดนี้ (และเฉพาะบรรทัดนี้) ฉันต้องการแทนที่คำว่า 'ทดสอบ' ด้วยคำว่า 'การผลิต' ดังนั้นฉันสามารถทำสิ่งนี้: grep 'firmware_revision' myfile.py | sed 's/test/production' นี่จะเป็นการเลือกบรรทัดที่ฉันต้องการและทำการทดแทน แต่ฉันไม่สามารถหาวิธีนำบรรทัดใหม่นี้ไปยังไฟล์ต้นฉบับเพื่อแทนที่บรรทัดเก่าได้ เห็นได้ชัดว่าฉันไม่สามารถเปลี่ยนเส้นทางกลับไปที่ไฟล์ดังนั้นฉันควรทำอย่างไร แม้ว่าฉันใช้ temporaries โดยใช้grepเพื่อรับสายฉันต้องฉันสูญเสียข้อมูลอื่น ๆ ในไฟล์ดังนั้นฉันไม่สามารถเพียงแค่เปลี่ยนมันทั้งหมดไปยังไฟล์ temp แล้วแทนที่เดิมด้วย temp แก้ไข - มีคนถามข้อมูลเพิ่มเติม ให้บอกว่าฉันมีไฟล์เต็มบรรทัดเช่นนี้ [ ('key_name1', str, 'value1', 'Description'), ('key_name2', str, 'value2', 'Description'), ('key_name3', str, 'value3', 'Description'), ('firmware_revision', str, 'my-firmware-name-test', 'Firmware revision …

7
grep บล็อกเส้นที่แน่นอน (เนื้อหาของ file1) จาก file2
ฉันมีสองไฟล์file1และfile2. เนื้อหาตัวอย่างของfile1คือ: A B C D E F G H และเนื้อหาของfile2เป็นเช่น: A B few other lines E F few more other lines A B C D E F G H few more other lines G H ดังนั้นฉันต้องการค้นหาบล็อกทั้งหมดของfile1เนื้อหาในfile2เท่านั้น ซึ่งหมายความว่าผลลัพธ์ควรมีเพียงบรรทัดเหล่านี้: A B C D E F G H โปรดทราบว่า: - เฉพาะบรรทัดที่มารวมกันควรเป็นส่วนหนึ่งของผลลัพธ์

3
วิธีการแทนที่รหัสหลายบรรทัดด้วย sed
ฉันมีไฟล์ขนาดใหญ่ที่มีอักขระพิเศษอยู่ sedมีรหัสหลายคู่สายจะมีที่ฉันต้องการจะเปลี่ยน นี้: text = "\ ------ ------\n\n\ This message was automatically generated by email software\n\ The delivery of your message has not been affected.\n\n\ ------ ------\n\n" จำเป็นต้องเปลี่ยนเป็น: text = "" ฉันลองใช้รหัสต่อไปนี้ แต่ไม่มีโชค: sed -i '/ text = "*/ {N; s/ text = .*affected.\./ text = ""/g}' /etc/exim.conf มันไม่ได้แทนที่อะไรและไม่แสดงข้อความผิดพลาดใด ๆ …

5
วิธีย่อ / path / to / file ไปยัง / p / t / file
ฉันกำลังมองหาซับในที่สง่างาม (เช่นawk) ที่จะทำให้สตริงของเส้นทาง Unix สั้นลงโดยใช้อักขระตัวแรกของผู้ปกครองแต่ละคน / ระดับกลาง แต่เป็นชื่อเต็ม ง่ายต่อการแสดงโดยตัวอย่าง: /path/to/file → /p/t/file /tmp → /tmp /foo/bar/.config/wizard_magic → /f/b/./wizard_magic /foo/bar/.config/wizard_magic→ /f/b/.c/wizard_magic จากจุดที่ดีโดย @ MichaelKjörlingและ @ChrisH ด้านล่างตัวอย่างนี้แสดงให้เห็นว่าเราจะแสดงตัวละครสองตัวแรกอย่างไรเมื่อตัวอักษรตัวแรกเป็นจุด
9 sed  awk  string 

3
sed - วิธีการใช้ประโยชน์ทุก ๆ คำที่ 3?
ได้รับ: main_east_library main_west_roof main_north_roof minor_south_roof ฉันจะใช้sed(โดยเฉพาะไม่ได้awk, trฯลฯ ) เพื่อสร้าง: main_east_Library main_west_Roof main_north_Roof minor_south_Roof สิ่งที่ต้องการ: $ echo "main_west_library main_west_roof main_north_roof minor_south_roof" | sed 's_\3_upcase(\3)_' แม้ว่าจะให้: sed: -e expression #1, char 16: Invalid back reference
9 sed 


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