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

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


1
จะทำให้ sed ไม่ตัดบรรทัดที่ไม่ตรงกันได้อย่างไร
ในตัวอย่างต่อไปนี้sedจับคู่บรรทัดที่ขึ้นต้นด้วยaหรือหรือcและพิมพ์อักขระตัวแรกของบรรทัดนั้น ( aหรือc): $ echo "ag bh ci dj ek fl" | sed 's/\(a\|c\)./\1/' # Matches lines starting with 'a' or 'c'. output: a bh c dj ek fl อย่างไรก็ตามบรรทัดที่ไม่ตรงกับรูปแบบจะถูกพิมพ์ออกมาเช่นกัน ฉันจะบอกsedให้ละเว้นบรรทัดที่ไม่ตรงกับรูปแบบได้อย่างไร ฉันสามารถรับเอฟเฟกต์ที่ต้องการได้โดยรวมเข้ากับgrep(ดังต่อไปนี้) แต่ฉันอยากจะรู้ว่าsedสามารถบรรลุ "ด้วยตัวเอง" ได้หรือไม่ $ echo "ag bh ci dj ek fl" | grep '[ac]' | sed 's/\(a\|c\)./\1/' output: …

3
ผนวกสตริงที่ท้ายบรรทัดทั้งหมดอย่างไร
ฉันกำลังพยายามเพิ่มสตริงที่ท้ายบรรทัดทั้งหมดในไฟล์ข้อความ แต่ฉันมีข้อผิดพลาดบางแห่ง ตัวอย่าง: ฉันนี้ในไฟล์ข้อความ: begin--fr.a2dfp.net begin--m.fr.a2dfp.net begin--mfr.a2dfp.net begin--ad.a8.net begin--asy.a8ww.net begin--abcstats.com ... ฉันวิ่ง: sed -i "s|\x0D$|--end|" file.txt และฉันได้รับ: begin--fr.a2dfp.net--end begin--m.fr.a2dfp.net--end begin--mfr.a2dfp.net--end begin--ad.a8.net begin--asy.a8ww.net--end begin--abcstats.com ... สตริงถูกเพิ่มเฉพาะในบางบรรทัดและไม่อยู่ในอื่น มีความคิดอะไรไหม
5 linux  shell  sed  parsing 

3
วิธีที่จะได้รูปแบบจากไฟล์
ฉันมีสองไฟล์หนึ่งเก็บรายการของรูปแบบอื่นต้องเปลี่ยนตามรูปแบบเหล่านี้ จนถึงตอนนี้ฉันได้ทำการทดลองกับ cat patterns.txt| xargs -n1| sed 's/patternfromfile/subtitution/' แต่ฉันไม่แน่ใจว่าจะป้อน xargs ลงใน 's / here //' ได้อย่างไร ขอบคุณ

3
คำสั่ง unix เพื่อตรวจสอบช่วงของคำในข้อความ
คำสั่ง unix ใดที่ฉันสามารถใช้เพื่อกำหนดระยะห่างบรรทัดที่คำปรากฏในข้อความ "span" เท่ากับจำนวนบรรทัดของอินสแตนซ์สุดท้ายของคำลบด้วยหมายเลขบรรทัดของอินสแตนซ์แรกของคำ 1| unix is on two lines 2| once above, and once below 3| unix ในตัวอย่างข้างต้น "span" ของ 'unix' จะเป็น 2 (3-1) จนถึงตอนนี้ฉันพยายามใช้ grep -n แต่ฉันไม่คิดว่า grep มีพลังมากพอ บางทีการใช้งาน sed หรือ awk บ้าง? ขอบคุณ!
3 unix  regex  grep  sed  awk 

2
mod_sed - apache + sed - ปัญหาของแบ็กสแลช
ฉันเพิ่งเริ่มใช้ sed และมีปัญหาเมื่อใช้ sed จาก Apache mod_seq ภารกิจคือเปลี่ยนโพสต์บริการเว็บเป็นโพสต์อัพโหลดไฟล์ Content-Type มีการเปลี่ยนแปลงโดยใช้ mod_headers และงานที่นี่คือการเปลี่ยนเนื้อหาของคำขอ คำขอร่างกาย: <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://tracx.de/pkp/interfaces/msg/1.0" xmlns:ns1="http://tracx.de/pkp/interfaces/core/1.0"><soapenv:Header/><soapenv:Body><ns:test>Hello World</ns:test></soapenv:Body></soapenv:Envelope> 1) ทดสอบ ok ด้วย sed จากพรอมต์คำสั่ง: sed "s/^.*$/--AaB03x\nContent-disposition: form-data; name=\"xmlfile\"; filename=\"myfile.xml\"\nContent-Type: text\/xml\n\n&\n--AaB03x--\n/" request.xml ผลผลิตตามที่คาดไว้กับการขึ้นบรรทัดใหม่: --AaB03x Content-disposition: form-data; name="xmlfile"; filename="myfile.xml" Content-Type: text/xml <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://tracx.de/pkp/interfaces/msg/1.0" xmlns:ns1="http://tracx.de/pkp/interfaces/core/1.0"><soapenv:Header/><soapenv:Body><ns:test>Hello World</ns:test></soapenv:Body></soapenv:Envelope> --AaB03x-- 2) การโทรด้วย Apache mod_sed: InputSed …

1
การใช้ sed with parallel ให้ผลลัพธ์เปล่าเมื่อเปลี่ยนเส้นทางไปยังไฟล์
ฉันกำลังใช้ zsh เปลือก. ฉันพยายามใช้ sed เพื่อแทนที่ข้อความในไฟล์จำนวนมากโดยใช้การขนานเพื่อเร่งความเร็วของกระบวนการ เมื่อฉันทดสอบนี้ในไฟล์เดียวและปล่อยให้คำสั่งออกไป stdout ฉันเห็นผลลัพธ์ที่คาดหวัง เมื่อฉันพยายามเปลี่ยนเส้นทางเอาต์พุตไปยังไฟล์ฉันได้ไฟล์ว่างเปล่า เกิดอะไรขึ้น? นี่คือตัวอย่างเล็ก ๆ น้อย ๆ โดยใช้ไฟล์ข้อมูลที่สร้างขึ้นเพียงไฟล์เดียวที่คุณสามารถตัดและวางเพื่อแสดง ... setopt interactivecomments # In this trivial example it is obviously non-sensical # to use parallel, but in reality I have many files... # Some very simple input data... paste <(printf "%s\n" `seq 1 …

4
ฉันจะแทนที่บรรทัดใหม่ด้วยลำดับการยกเว้นได้อย่างไร
การใช้sedเพื่อสร้างข้อความที่มีอักขระบางตัวที่เหมาะสมสำหรับใช้ในสตริงตัวอักษรนั้นตรงไปตรงมา: sed "s/\\\\/\\\\\\\\/g" sed "s/\\\"/\\\\\\\"/g" แต่ฉันจะทำสิ่งที่คล้ายกับไฟล์ข้อความที่มีอักขระขึ้นบรรทัดใหม่ได้อย่างไร
3 sed  awk 

2
วิธีแทรกข้อความที่จุดเริ่มต้นของแต่ละย่อหน้าใน bash
ฉันมีไฟล์ที่มีหลายย่อหน้าคั่นด้วยบรรทัดว่าง ในทางเทคนิคแล้วพวกเขาไม่ใช่ย่อหน้าเพียงแค่ส่วนของข้อความคั่นด้วยบรรทัดว่าง ฉันต้องการกำหนดหมายเลขย่อหน้าเพื่อพูดโดยการใส่ตัวเลขในบรรทัดแรกของแต่ละบรรทัดหลังจากบรรทัดว่าง ดังนั้นหากไฟล์ของฉันพูดว่า: This is text. This is more text. Even more text! This is text in section two. Some more text. You get the point... ฉันต้องการที่จะทำให้มันพูดว่า: 1This is text this is more text Even more text! 2This is text in section two. Some more text. You get the …

5
จะแบ่งไฟล์ CSV ตามจำนวนแถวที่ระบุอย่างไร
ฉันมีไฟล์ CSV (ประมาณ 10,000 แถวแต่ละแถวมี 300 คอลัมน์) เก็บไว้ในเซิร์ฟเวอร์ LINUX ฉันต้องการแบ่งไฟล์ CSV นี้เป็นไฟล์ CSV 500 ไฟล์จาก 20 รายการต่อไฟล์ (แต่ละรายการมีส่วนหัว CSV เดียวกันกับที่มีอยู่ใน CSV เดิม) มีคำสั่ง linux ช่วยการแปลงนี้หรือไม่
2 linux  unix  sed  csv  awk 

5
ลบบรรทัดที่มีรูปแบบที่ตรงกันหลังจากบรรทัดแรกด้วย sed
ฉันต้องการลบทุกบรรทัดที่มีรูปแบบหลังจากบรรทัดแรก (รูปแบบคือ/^country\t/) ฉันสามารถลบทุกครั้งที่เกิดขึ้นด้วยsed '/^country\t/d' in.txt > out.txtแต่ฉันต้องการที่จะให้เกิดขึ้นครั้งแรกในบรรทัดแรก เรื่องกลับมาที่ฉันมีไดเรกทอรีของแฟ้มที่คั่นด้วยแท็บที่มีส่วนหัวและฉัน concatenate catไฟล์เหล่านี้ด้วย ฉันต้องการลบส่วนหัวพิเศษ ใน Vim ฉันสามารถทำอะไรบางอย่างได้: 2,$g/^country\t/dแต่ฉันไม่สามารถหาทางแก้ปัญหาได้ เมื่อฉันพยายามที่ฉันได้รับข้อผิดพลาดsed '2,$ /^country\t/d in.txt > out.txtunknown command: / ขอบคุณ!
2 sed 

1
รุ่น sed ไม่ถูกต้องเมื่อรวบรวมบน OSX
ฉันพยายามติดตั้งcrosstool-ngบน OSX 10.6.8 ที่ระยะการกำหนดค่าฉันทำงาน./configure --prefix=/opt/crossและฉันได้ผลลัพธ์ต่อไปนี้: ! ./configure --prefix=/opt/cross checking build system type... x86_64-apple-darwin10.8.0 checking host system type... x86_64-apple-darwin10.8.0 checking for a BSD-compatible install... /opt/local/bin/ginstall -c checking for grep that handles long lines and -e... /usr/bin/grep checking for egrep... /usr/bin/grep -E checking for a sed that does not truncate output... /usr/bin/sed …
2 macos  sed  compile 

2
ฉันจะย้ายตารางด้วยค่าคีย์ที่ซ้ำกันได้อย่างไร
ฉันมีตารางที่มีลักษณะดังนี้: Column A | Column B 10 | 0.1 10 | 0.2 10 | 0.3 20 | 0.4 20 | 0.5 20 | 0.6 ฉันต้องเปลี่ยนมันให้เป็นอย่างนี้: 10 | 20 0.1 | 0.4 0.2 | 0.5 0.3 | 0.6 ค่าต่างกันเกือบ 2k ในคอลัมน์ A สำหรับแต่ละค่ามีค่า 1k ในคอลัมน์ B อย่างแน่นอนซึ่งอาจทำซ้ำ มีวิธีอัตโนมัติในการทำเช่นนี้หรือไม่?


1
sed stdin เร็วกว่าการอ่านจากไฟล์?
ฉันพยายามที่จะตรวจสอบว่า sed อ่านได้เร็วขึ้นจาก stdin (ด้วยการเปลี่ยนเส้นทางเชลล์ <) หรือโดยการระบุไฟล์ที่ sed ควรอ่าน ฉันไม่พบคำตอบที่ชัดเจนใน Google ไหนเร็วกว่ากัน sed -e "expression" < file หรือ sed -e "expression" file
2 sed 

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