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

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

3
กรองไฟล์. CSV ตามค่าคอลัมน์ที่ 5 ของไฟล์และพิมพ์บันทึกเหล่านั้นลงในไฟล์ใหม่
ฉันมีไฟล์. CSV ซึ่งมีรูปแบบด้านล่าง: "column 1","column 2","column 3","column 4","column 5","column 6","column 7","column 8","column 9","column 10 "12310","42324564756","a simple string with a , comma","string with or, without commas","string 1","USD","12","70%","08/01/2013","" "23455","12312255564","string, with, multiple, commas","string with or, without commas","string 2","USD","433","70%","07/15/2013","" "23525","74535243123","string , with commas, and - hypens and: semicolans","string with or, without commas","string 1","CAND","744","70%","05/06/2013","" "46476","15467534544","lengthy …
16 linux  sed  awk  csv  filter 

2
grep: แสดงชื่อไฟล์หนึ่งครั้งจากนั้นแสดงบริบทด้วยหมายเลขบรรทัด
ซอร์สโค้ดของเรามีรหัสข้อผิดพลาดกระจายอยู่ทั่วไป การค้นหามันเป็นเรื่องง่ายด้วย grep แต่ฉันต้องการฟังก์ชั่นทุบตีfind_codeที่ฉันสามารถดำเนินการ (เช่น. find_code ####) ซึ่งจะให้ผลลัพธ์ตามบรรทัดเหล่านี้: /home/user/path/to/source.c 85 imagine this is code 86 this is more code 87 { 88 nicely indented 89 errorCode = 1111 90 that's the line that matched! 91 ok this block is ending 92 } 93 } นี่คือสิ่งที่ฉันมีในปัจจุบัน: find_code() { # "= " …

2
ลบจนถึงการเกิดขึ้นครั้งแรกของลำไส้ใหญ่โดยใช้ sed
คำสั่ง sed ของฉันคือ sed '/(.*:)/d' <<< 'abcd:bcde:cdeaf' มันจะต้องกลับมา bcde:cdeaf (เช่น) ตัวละครทั้งหมดก่อนที่เครื่องหมายโคลอนแรกในบรรทัดและเครื่องหมายโคลอนต้องถูกลบออก แต่นี่ไม่ได้เป็นการลบอะไรเลย ความสับสนของฉันส่วนใหญ่เกิดจาก 1) parens สำหรับการจับคู่รูปแบบจำเป็นต้องได้รับการยกเว้นภายใน sed regex-es หรือไม่? 2) ในกรณีใดกรณีหนึ่ง (ด้วยการหลบหนี / ไม่ต้องใช้การหลบหลีก) มันใช้งานไม่ได้ ฉันเหนื่อย, sed -E '/\\(.*:\\)/d' <<< 'abcd:bcde'
16 sed 

5
ใช้ sed เพื่อแยกข้อความระหว่าง 2 แท็ก
ฉันมีไฟล์. xml และฉันพยายามทำ "groupinstall" บนเครื่อง RHEL6 เนื่องจากมีหลายร้อยไลบรารีในไฟล์. xml นั้น ... (ใกล้ถึง 16,000 บรรทัด) ฉันจึงพยายามแยกชื่อกลุ่มที่มีอยู่ในไฟล์. xml ที่มีโครงสร้างนี้: <b> <group> <id> group name </id> <packages> ... </packages> <id> group name 2 </id> <packages> ... </packages> <id> etc... </id> </group> </b> โดยทั่วไปนี่คือสิ่งที่ฉันได้ลอง: sed -n '/<id>/,/<\/id>/p' test1.txt > test2.txt ฉันคัดลอกไฟล์. xml ไปยัง test1.txt ฉันพยายามแยกชื่อกลุ่มจาก …
16 sed 

5
วิธีการฝังคำสั่งเชลล์ลงในนิพจน์ sed?
ฉันมีไฟล์ข้อความที่มีรูปแบบต่อไปนี้: keyword value keyword value ... โดยที่ keyword เป็นคำเดียวและความคุ้มค่าเป็นอย่างอื่นจนกระทั่งสิ้นสุดบรรทัด ฉันต้องการอ่านไฟล์จากเชลล์สคริปต์ในวิธีที่ค่า (แต่ไม่ใช่คำหลัก) ได้รับการขยายเชลล์ ด้วยความที่เป็นเรื่องง่ายที่จะจับคู่คำหลักและชิ้นส่วนค่า input=' keyword value value keyword "value value" keyword `uname` ' echo "$input"|sed -e 's/^\([^[:space:]]*\)[[:space:]]\(.*\)$/k=<\1> v=<\2>/' ซึ่งผลิต k=<keyword> v=<value value> k=<keyword> v=<"value value"> k=<keyword> v=<`uname`> แต่คำถามก็คือฉันจะฝังคำสั่งเชลล์ลงในส่วนทดแทนของนิพจน์ sed ได้อย่างไร \1 `echo \2`ในกรณีนี้ผมอยากจะเปลี่ยนให้เป็น
16 shell  sed 

4
กำลังประมวลผลตัวแปร bash ด้วย sed
ตัวแปร bash LATLNG มีค่าละติจูดและลองจิจูดในวงเล็บเหลี่ยมเช่นนั้น (53.3096,-6.28396) ฉันต้องการแยกคำเหล่านี้เป็นตัวแปรที่เรียกว่า LAT และ LON ซึ่งฉันกำลังพยายามทำผ่านทาง sed เช่นนั้น LAT=$(sed "s/(\(.*\),\(.*\))/\1/g" "$LATLNG") LON=$(sed "s/(\(.*\),\(.*\))/\2/g" "$LATLNG") อย่างไรก็ตามฉันได้รับข้อผิดพลาดต่อไปนี้: sed: can't read (53.3096,-6.28396): No such file or directory

3
ทำการแก้ไขหลายรายการด้วยการโทรเพียงครั้งเดียวเพื่อระงับ
ฉันพยายามใช้ sed เพื่อแก้ไขไฟล์กำหนดค่า มีบางบรรทัดที่ฉันต้องการเปลี่ยน ฉันรู้ว่าภายใต้ Linux sed -iอนุญาตให้แก้ไขได้ แต่คุณต้องบันทึกลงในไฟล์สำรอง อย่างไรก็ตามฉันต้องการหลีกเลี่ยงการมีไฟล์สำรองหลายไฟล์และทำให้การเปลี่ยนแปลงทั้งหมดของฉันพร้อมกัน มีวิธีที่จะทำกับsed -iหรือมีทางเลือกที่ดีกว่า?
16 sed 

2
การแทนที่การเกิดขึ้นครั้งแรกของรูปแบบในบรรทัดสำหรับทุกบรรทัดในไฟล์ที่มี sed
เป็นไปได้ที่จะทำในหนึ่งซับ? ฉันมีผลลัพธ์เช่นนี้ "First line" - Description " Second line" - Description "Third line" - Description " Fourth line" - Description อินพุตนี้สร้างขึ้นโดยอัตโนมัติ ฉันต้องการแทนที่การเกิดขึ้นครั้งแรกของ"(เครื่องหมายคำพูด + ช่องว่าง) ด้วย"(เครื่องหมายคำพูด) สำหรับแต่ละบรรทัด ถ้าฉันใช้การทดแทนทั่วโลกมันก็จะเปลี่ยนทุกอย่างที่เกิดขึ้นline" -เป็นline"-ดังนั้นฉันสงสัยว่ามันเป็นไปได้ที่จะใช้สายการบินเดียวที่จะทำให้สำเร็จ ฉันได้ลองใช้^แบบนี้ sed -r ':a;N;$!ba;s/(\^\" )/\"/g' แต่มันไม่ทำงานมันไม่ได้แทนที่อะไรเลย ฉันเหนื่อย sed -r ':a;N;$!ba;s/(^|\" )/\"/g' และมันจะแทนที่เหตุการณ์ที่เกิดขึ้นทั้งหมด ฉันเพิ่งเริ่มใช้ sed ดังนั้นฉันไม่รู้จริง ๆ ว่าฉันทำอะไรผิด ฉันหายไปนี่อะไร

7
มีวิธีป้องกันไม่ให้ sed ตีความหมายของสตริงการแทนที่หรือไม่? [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว หากคุณต้องการแทนที่คำหลักด้วยสตริงที่ใช้ sed, sed พยายามอย่างหนักเพื่อตีความสตริงการแทนที่ของคุณ หากสตริงการแทนที่มีอักขระที่พิจารณาว่าพิเศษเช่นอักขระ '/' สตริงนั้นจะล้มเหลวเว้นแต่แน่นอนว่าคุณหมายถึงสตริงการแทนที่ของคุณที่จะมีอักขระที่บอกให้รู้ว่าจะต้องทำอย่างไร Ex: VAR="hi/" sed "s/KEYWORD/$VAR/g" somefile มีวิธีใดที่จะบอกว่าอย่าพยายามตีความสตริงการแทนที่สำหรับอักขระพิเศษ? สิ่งที่ฉันต้องการคือสามารถแทนที่คำหลักในไฟล์ด้วยเนื้อหาของตัวแปรไม่ว่าเนื้อหานั้นจะเป็นอะไร
16 bash  shell-script  sed 


8
sed - ลบการเกิดขึ้นครั้งสุดท้ายของสตริง (เครื่องหมายจุลภาค) ในไฟล์หรือไม่
ฉันมีไฟล์ csv ที่มีขนาดใหญ่มาก คุณจะลบส่วนสุดท้าย,ด้วย sed (หรือคล้ายกัน) ได้อย่างไร ... [11911,0,"BUILDER","2014-10-15","BUILDER",0,0], [11912,0,"BUILDER","2014-10-15","BUILDER",0,0], [11913,0,"BUILDER","2014-10-15","BUILDER",0,0], ] ผลลัพธ์ที่ต้องการ ... [11911,0,"BUILDER","2014-10-15","BUILDER",0,0], [11912,0,"BUILDER","2014-10-15","BUILDER",0,0], [11913,0,"BUILDER","2014-10-15","BUILDER",0,0] ] คำสั่ง sed ต่อไปนี้จะลบการเกิดขึ้นครั้งสุดท้ายต่อบรรทัด แต่ฉันต้องการต่อไฟล์ sed -e 's/,$//' foo.csv ไม่ทำงานนี้ sed '$s/,//' foo.csv
15 sed 

9
ค้นหาการเกิดขึ้นทั้งหมดในไฟล์ที่มี sed
การใช้ OPEN STEP 4.2 OS ... ฉันกำลังใช้sedคำสั่งต่อไปนี้: sed -n '1,/141.299.99.1/p' TESTFILE | tail -3 คำสั่งนี้จะค้นหาหนึ่งอินสแตนซ์ในไฟล์ที่มี ip ของ 141.299.99.1 และรวม 3 บรรทัดก่อนที่มันจะดีทั้งหมดยกเว้นว่าฉันต้องการหาอินสแตนซ์ทั้งหมดของ IP และ 3 บรรทัดก่อนหน้าด้วย ไม่ใช่แค่คนแรก
15 sed 

8
วิธีการ grep หลายบรรทัด
คุณจะทำการ grep สำหรับข้อความที่ปรากฏในสองบรรทัดได้อย่างไร? ตัวอย่างเช่น: pbsnodes เป็นคำสั่งที่ฉันใช้ที่ส่งคืนการใช้ประโยชน์ของคลัสเตอร์ linux root$ pbsnodes node1 state = free procs = 2 bar = foobar node2 state = free procs = 4 bar = foobar node3 state = busy procs = 8 bar = foobar ฉันต้องการกำหนดจำนวนของ procs ที่ตรงกับโหนดที่อยู่ในสถานะ 'ว่าง' จนถึงตอนนี้ฉันสามารถระบุ "จำนวนของ procs" และ "โหนดในสถานะอิสระ" แต่ฉันต้องการรวมพวกมันเป็นคำสั่งเดียวที่แสดง procs …


2
sed หนึ่งซับเพื่อลบทุกอย่างระหว่างวงเล็บหรือไม่
ฉันกำลังทำงานกับข้อความที่เต็มไปด้วยสิ่งของระหว่างวงเล็บ [] ที่ฉันไม่ต้องการ เนื่องจากฉันสามารถลบเครื่องหมายวงเล็บด้วยตัวเองฉันไม่ต้องการซับในที่จะทำเพื่อฉัน แต่ฉันต้องการซับที่จะลบทุกอย่างระหว่างพวกเขา แล้ววงเล็บ () แทนที่จะเป็นวงเล็บคืออะไร

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