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

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

1
ค้นหา & sed (ค้นหาและแทนที่)
ฉันใช้คำสั่งต่อไปนี้ใน mac ของฉัน: $find . -name “*.java” -exec sed -i ’s/foo/bar/g’ {} \; และดูเหมือนว่าจะไม่มีผลกระทบ ฉันมีสองไฟล์ในไดเรกทอรีที่ลงท้ายด้วย. java ซึ่งทั้งคู่มีข้อความ foo อยู่ในนั้น ฉันพลาดอะไรไปรึเปล่า? แก้ไข: ผลลัพธ์จากการร้องขอความคิดเห็น [aafghani-03:~/test amirafghani]$ find . -name "*.java" -exec sed -i 's/foo/bar/g' {} \; sed: 1: "./bar.java": invalid command code . sed: 1: "./foo.java": invalid command code .
26 find  sed  osx 

1
ทำไม 'sed q' ทำงานแตกต่างกันเมื่ออ่านจากไปป์
คำถามนี้ถูกโยกย้ายจาก Server Fault เนื่องจากสามารถตอบได้ใน Unix & Linux Stack Exchange อพยพ 3 ปีที่แล้ว ฉันสร้างไฟล์ทดสอบชื่อ 'ทดสอบ' ที่มีสิ่งต่อไปนี้: xxx yyy zzz ฉันรันคำสั่ง: (sed '/y/ q'; echo aaa; cat) < test และฉันได้รับ: xxx yyy aaa zzz จากนั้นฉันก็วิ่ง: cat test | (sed '/y/ q'; echo aaa; cat) และได้รับ: xxx yyy aaa คำถาม sedอ่านและพิมพ์จนกว่าจะพบบรรทัดที่มี 'y' จากนั้นหยุด …
25 sed  pipe 

4
วิธีใช้ Sed เพื่อแทนที่อักขระทั้งหมดก่อนหน้าโคลอน
ฉันจะแทนที่สตริงต่อไปนี้ได้อย่างไร hd_ma_prod_customer_ro:*:123456789:john.doe กับ john.doe โดยทั่วไปฉันต้องการค้นหาเครื่องหมายจุดคู่สุดท้าย (:) และลบทุกอย่างก่อนหน้าและรวมไว้ด้วย
25 sed 

4
วิธีแยกล็อกระหว่างการประทับเวลาสองครั้ง
ฉันต้องการแยกบันทึกทั้งหมดระหว่างการประทับเวลาสองครั้ง บางบรรทัดอาจไม่มีการประทับเวลา แต่ฉันต้องการเส้นเหล่านั้นด้วย ในระยะสั้นฉันต้องการทุกบรรทัดที่อยู่ภายใต้การประทับเวลาสองครั้ง โครงสร้างบันทึกของฉันดูเหมือนว่า: [2014-04-07 23:59:58] CheckForCallAction [ERROR] Exception caught in +CheckForCallAction :: null --Checking user-- Post [2014-04-08 00:00:03] MobileAppRequestFilter [DEBUG] Action requested checkforcall สมมติว่าผมต้องการที่จะดึงทุกอย่างระหว่างและ2014-04-07 23:002014-04-08 02:00 โปรดทราบว่าการประทับเวลาเริ่มต้นหรือการประทับเวลาสิ้นสุดอาจไม่มีอยู่ในบันทึก แต่ฉันต้องการทุกบรรทัดระหว่างการประทับเวลาสองครั้งนี้

10
วิธีลบบรรทัดใหม่หลายรายการที่ EOF
ฉันมีไฟล์ที่ลงท้ายด้วยการขึ้นบรรทัดใหม่อย่างน้อยหนึ่งบรรทัดและควรลงท้ายด้วยการขึ้นบรรทัดใหม่เพียงครั้งเดียว ฉันจะทำสิ่งนั้นด้วยเครื่องมือ Bash / Unix / GNU ได้อย่างไร ตัวอย่างไฟล์ที่ไม่ดี: 1\n \n 2\n \n \n 3\n \n \n \n ตัวอย่างไฟล์ที่แก้ไข: 1\n \n 2\n \n \n 3\n กล่าวอีกนัยหนึ่ง: ควรมีการขึ้นบรรทัดใหม่หนึ่งบรรทัดระหว่าง EOF และอักขระที่ไม่ใช่บรรทัดใหม่ล่าสุดของไฟล์ การดำเนินการอ้างอิง อ่านเนื้อหาไฟล์ตัดบรรทัดใหม่หนึ่งบรรทัดจนไม่มีบรรทัดใหม่อีกสองบรรทัดในตอนท้ายเขียนมันกลับมา: #! /bin/python import sys with open(sys.argv[1]) as infile: lines = infile.read() while lines.endswith("\n\n"): lines = lines[:-1] with open(sys.argv[2], 'w') …
25 bash  sed  awk  ed 

8
สามารถลบอักขระขึ้นบรรทัดใหม่ 'สองเท่า' ได้หรือไม่
ฉันมีเอกสารที่มีบรรทัดว่างเปล่าจำนวนมาก ฉันจะลบออกได้อย่างไรเมื่อมี 2 หรือมากกว่ารวมกัน ฉันลองsed "s/\n\n//"ไฟล์แล้วแต่ใช้งานไม่ได้ ไม่มีข้อผิดพลาด
25 sed 

2
กำลังลบช่องว่างแท็บบรรทัดใหม่ ฯลฯ ออกจากตัวแปรหรือไม่
นี่เป็นข้อผิดพลาดที่ฉันได้รับและมันล้มเหลวเนื่องจากตัวแปรที่มีค่าควรจะเป็น 2 (ฉันได้รับสิ่งนี้โดยใช้กselect * from tabel) ฉันได้รับช่องว่างในตัวแปรนั้น + 0 != 2 ./setjobs[19]: 0: not found. ฉันจะลบช่องว่างเหล่านั้นทั้งหมดหรือขึ้นบรรทัดใหม่ออกจากตัวแปรนั้นได้อย่างไร Can tr, sedหรืออะไรความช่วยเหลือ? นี่คือสิ่งที่ฉันทำ: set_jobs_count=$(echo "set heading off; select count(*) from oppar_db where ( oppar_db_job_name, oppar_db_job_rec ) in ($var) ;" | \ sqlplus -s ${OP_ORA_USER}/${OP_ORA_PASS}@$OPERATIONAL_DB_NAME) ใช้งานได้ตามที่แนะนำ: | sed 's/[[:space:]]//g' แต่ฉันยังคงได้รับค่าเช่น: set_jobs_count= 2
25 shell  sed  tr  whitespace  newlines 

8
วิธีลบคอลัมน์สุดท้ายของไฟล์ใน Linux
ฉันต้องการลบคอลัมน์สุดท้ายของไฟล์ txt ในขณะที่ฉันไม่ทราบว่าหมายเลขคอลัมน์คืออะไร ฉันจะทำสิ่งนี้ได้อย่างไร ตัวอย่าง: การป้อนข้อมูล: 1223 1234 1323 ... 2222 123 1233 1234 1233 ... 3444 125 0000 5553 3455 ... 2334 222 และฉันต้องการให้ผลลัพธ์ของฉันเป็น: 1223 1234 1323 ... 2222 1233 1234 1233 ... 3444 0000 5553 3455 ... 2334

6
วิธีใช้ `/ usr / bin / env sed -f 'ใน shebang?
การพิมพ์/usr/bin/env sed -fงานเทอร์มินัล แต่ถ้าใช้เป็น Shebang #!/usr/bin/env sed -f s/a/b/ สคริปต์จะล้มเหลวในการดำเนินการ: /usr/bin/env: sed -f: No such file or directory ฉันเชื่อว่ามันเกี่ยวข้องกับ -f แต่จะแก้ไขได้อย่างไร?

9
วิธีลบทุกบรรทัดที่สองจากไฟล์ได้อย่างไร
ไฟล์: Data inserted into table. Total count 13 No error occurred Data inserted into table. Total count 45 No error occurred Data inserted into table. Total count 14 No error occurred Data inserted into table. Total count 90 No error occurred ไฟล์เอาต์พุตที่คาดหวัง: Data inserted into table. Total count 13 Data …

3
แทนที่ข้อความอย่างรวดเร็วในไฟล์ที่มีขนาดใหญ่มาก
ฉันมีไฟล์ข้อความ 25GB ที่ต้องการสตริงแทนที่ในไม่กี่บรรทัด ฉันสามารถใช้งานได้sedสำเร็จ แต่ใช้เวลาในการรันนานมาก sed -i 's|old text|new text|g' gigantic_file.sql มีวิธีที่เร็วกว่าในการทำเช่นนี้?

3
แยก regex ที่ตรงกับ 'sed' โดยไม่ต้องพิมพ์ตัวอักษรโดยรอบ
สำหรับแพทย์ 'sed' ทุกคนที่นั่น: คุณจะทำให้ 'sed' แยกนิพจน์ปกติที่ตรงกันในบรรทัดได้อย่างไร ในคำอื่น ๆ ฉันต้องการเพียงสตริงที่สอดคล้องกับการแสดงออกปกติกับตัวละครที่ไม่ได้จับคู่ทั้งหมดจากบรรทัดที่มีการแยกออก ฉันลองใช้คุณสมบัติการอ้างอิงกลับด้านล่าง regular expression to be isolated gets `inserted` here | v sed -n 's/.*\( \).*/\1/p สิ่งนี้ใช้ได้กับบางนิพจน์เช่น sed -n 's/.*\(CONFIG_[a-zA-Z0-9_]*\).*/\1/p ซึ่งแยกชื่อแมโครทั้งหมดที่ขึ้นต้นด้วย 'CONFIG_ .... ' (พบในไฟล์ '* .h' บางไฟล์) และพิมพ์ออกมาทีละบรรทัด CONFIG_AT91_GPIO CONFIG_DRIVER_AT91EMAC . . CONFIG_USB_ATMEL CONFIG_USB_OHCI_NEW . e.t.c. แต่ข้างต้นแบ่งลงสำหรับสิ่งที่ต้องการ sed -n 's/.*\([0-9][0-9]*\).*/\1/p การทำเช่นนี้จะส่งกลับตัวเลขหลักเดียวเสมอ …
24 sed 

3
วิธีใช้ [\ w] + ในการแสดงออกปกติใน sed?
ฉันอยู่บน Windows แต่ฉันเดาว่าคำถามของฉันยังคงอยู่ที่นี่ C:\Users\User>grep --version GNU grep 2.6.3 C:\Users\User>sed --version GNU sed version 4.2.1 ฉันสังเกตเห็นว่างานต่อไปนี้ (การแสดงผลhere): echo here | grep -E "\w+" echo here | grep -E "[her]+" แต่สิ่งนี้ไม่ทำงาน (ไม่แสดงผลอะไร): echo here | grep -E "[\w]+" สิ่งนี้จะทำอีกครั้ง (การส่งออกhere): echo here | grep -P "[\w]+" ดังนั้น[\w]สิ่งที่เฉพาะเจาะจงกับการแสดงออกปกติ Perl ฉันคิดว่า ถูกต้องไหม งั้นมาพูดsedกัน งานนี้ …

5
จะ grep สำหรับข้อความในไฟล์และแสดงย่อหน้าที่มีข้อความได้อย่างไร
ด้านล่างนี้เป็นข้อความในไฟล์: Pseudo name=Apple Code=42B state=fault Pseudo name=Prance Code=43B state=good ฉันต้องการ grep สำหรับ "42B" และรับผลลัพธ์จากข้อความข้างต้นเช่น: Pseudo name=Apple Code=42B state=fault ใครบ้างมีความคิดเกี่ยวกับวิธีการบรรลุการใช้grep/ awk/ sed?

4
sed บน OSX insert ที่บรรทัดหนึ่ง
ดังนั้นฉันจึงใช้ 'sed' บน linux มาระยะหนึ่งแล้ว แต่มีปัญหาเล็กน้อยในการพยายามใช้กับ OSX ตั้งแต่ 'POSIX sed' และ 'GNU sed' มีความแตกต่างกันเล็กน้อย ขณะนี้ฉันกำลังดิ้นรนกับวิธีการแทรกบรรทัดข้อความหลังจากหมายเลขบรรทัดที่แน่นอน (ในกรณีนี้สาย 4) บน linux ฉันจะทำสิ่งนี้: sed --in-place "4 a\ mode '0755'" file.txt ดังนั้นใน OSX ฉันลองนี้: sed -i "" "4 a\ mode '0755'" file.txt อย่างไรก็ตามสิ่งนี้ทำให้ฉันมีข้อผิดพลาด 'ตัวละครพิเศษหลังจาก \ ที่ส่วนท้ายของคำสั่ง' ความคิดใดที่นี่มีอะไรผิดปกติ? ฉันพิมพ์ผิดหรือไม่? หรือฉันไม่เข้าใจความแตกต่างระหว่างรุ่นของ sed อีกไหม
24 sed  osx  posix  gnu 

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