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

Sed เป็นที่รู้จักกันในชื่อ Stream Editor ซึ่งสามารถทำการกรองและ / หรือเปลี่ยนฟังก์ชั่นต่าง ๆ ในอินพุตมาตรฐานหรือไฟล์ที่ผู้ใช้ระบุ มันถูกใช้เพื่อค้นหาและแทนที่ในไฟล์ข้อความ หากคำถามของคุณเกี่ยวกับการประมวลผลข้อความแท็กนี้น่าจะเหมาะสม

2
ฉันจะใช้ตัวแปรในคำสั่ง sed ได้อย่างไร
ฉันลองใช้รหัสต่อไปนี้เพื่อแทนที่QQด้วยZZแต่ไม่ได้ทำสิ่งที่ฉันต้องการ: var1=QQ sed -i 's/$var1/ZZ/g' $file อย่างไรก็ตามรหัสนี้ทำในสิ่งที่ฉันต้องการ: sed -i 's/QQ/ZZ/g' $file ฉันจะใช้ตัวแปรได้sedอย่างไร
266 command-line  bash  sed 


2
ใช้ sed กับตัวแปรสตริงมากกว่าไฟล์
ฉันได้รับการบอกว่าเป็นไปได้ แต่ไม่มีตัวอย่างการทำงานเดียวที่sedสามารถอ่านจากตัวแปรสตริงโดยไม่จำเป็นต้องใช้ไฟล์อินพุต ฉันยังไม่ได้ไปทำงาน เพื่อความปลอดภัยทั่วไปฉันกำลังเขียน$PATHตัวแปรไปยังตัวแปรอื่นเนื่องจากฉันยุ่งกับเรื่องนี้เพราะฉันไม่ต้องการปัญหาอื่น ๆ ที่จะเกิดขึ้นจนกว่าฉันจะรู้วิธีการทำเช่นนี้ พิจารณาสิ่งต่อไปนี้: ~$x=$PATH ~$sed -i 's/:/ /g' $x สิ่งนี้ล้มเหลวด้วย: ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว นี่คือบางส่วนที่ฉันลอง: ~$ sed -i 's/:/ /g' | (read x) sed: no input files ~$ sed -i 's/:/ /g' | (read $x) bash: read: `/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games': not a valid identifier sed: no input files ~$ sed -i …
30 sed 

2
Sed เพื่อลบช่องว่าง
ไม่มีใครรู้วิธีใช้ Sed เพื่อลบช่องว่างทั้งหมดในไฟล์ข้อความหรือไม่? ฉันยังพยายามใช้คำสั่ง "d" ลบเพื่อทำเช่นนั้น แต่ดูเหมือนจะไม่สามารถเข้าใจได้
28 sed 

5
ฉันจะรวมไฟล์เป็นรายบรรทัดได้อย่างไร
cat file1 foo ice two cat file2 bar cream hundred ผลลัพธ์ที่ต้องการ: foobar icecream twohundred file1 และ file2 จะมีจำนวนบรรทัดเท่ากันเสมอในสถานการณ์ของฉันในกรณีที่ทำให้สิ่งต่าง ๆ ง่ายขึ้น

4
อะไรที่ไม่ดีและใช้ทำอะไร
ฉันได้เห็นsedเมื่อเร็ว ๆ นี้จำนวนมากและฉันคิดว่ามันเป็นคำสั่งที่ค่อนข้างสับสน manpages ไม่มีประโยชน์อย่างยิ่ง แต่ฉันรู้ว่ามันสามารถใช้สำหรับการแยกวิเคราะห์ผลลัพธ์ของคำสั่งอื่น ๆ มันคืออะไรsedและมันใช้อะไรกันแน่? ฉันกำลังมองหาคำตอบที่ครอบคลุมสิ่งที่sedเป็นสิ่งที่มักจะใช้และตัวอย่างพื้นฐาน / ไวยากรณ์
20 command-line  sed 

7
Regex ด้วยคำสั่ง sed เพื่อแยกข้อความ json
ฉันมีข้อความ json นี้: { "buildStatus" : { "status" : "ERROR", "conditions" : [{ "status" : "OK", "metricKey" : "bugs" }, { "status" : "ERROR", "metricKey" : "test_success_density" }, { "status" : "OK", "metricKey" : "vulnerabilities" } ], "periods" : [] } } ฉันต้องการที่จะแยกสถานะโดยรวมของ buildStatus คือเอาท์พุทที่คาดหวังคือ "ข้อผิดพลาด" "buildStatus" : { "status" …


6
ไหนจะเร็วกว่าที่จะลบบรรทัดแรกในไฟล์ ... เซดหรือท้าย
ในคำตอบนี้ ( ฉันจะลบบรรทัดแรกของไฟล์ที่มี sed ได้อย่างไร ) มีสองวิธีในการลบระเบียนแรกในไฟล์: sed '1d' $file >> headerless.txt ** ---------------- หรือ ----------------** tail -n +2 $file >> headerless.txt โดยส่วนตัวแล้วฉันคิดว่าtailตัวเลือกนั้นเป็นที่ชื่นชอบและน่าอ่านมากกว่า แต่อาจเป็นเพราะฉันถูกท้าทาย วิธีใดเร็วที่สุด
14 scripts  sed  tail 

5
ความแตกต่างของไฟล์ขนาดใหญ่สองไฟล์
ฉันมี "test1.csv" และมันมี 200,400,600,800 100,300,500,700 50,25,125,310 และ test2.csv และประกอบด้วย 100,4,2,1,7 200,400,600,800 21,22,23,24,25 50,25,125,310 50,25,700,5 ตอนนี้ diff test2.csv test1.csv > result.csv แตกต่างจาก diff test1.csv test2.csv > result.csv ฉันไม่รู้ว่าคำสั่งใดถูกต้อง แต่ฉันต้องการอย่างอื่นทั้งสองคำสั่งด้านบนจะแสดงผลลัพธ์ออกมาเหมือนกัน 2 > 100,4,2,1,7 3 2,3c3,5 4 < 100,300,500,700 5 < 50,25,125,310 6 \ No newline at end of file 7 --- 8 …
14 grep  sed  awk  diff 


2
วิธีการ sed และแทนที่สตริงด้วยเส้นทางโฟลเดอร์
ฉันพยายามเขียนสคริปต์ทุบตีต่อไปนี้: HOME_DIR=/opt/my_home find ./CONFIG -type f -exec sed -i "s/_HOME_DIR_/$_HOME_DIR/g" {} \; บรรทัดที่ฉันต้องการเปลี่ยนในไฟล์คือ: users = "_HOME_DIR_/config/data/_DOMAIN_/users.conf" ดังนั้นผลลัพธ์ที่ได้จะต้อง: users = "/opt/my_home/config/data/_DOMAIN_/users.conf" แต่ฉันไม่เข้าใจ ... ฉันคิดว่ามันเป็นเพราะตัวอักษรหลบหนี ... มีใครบ้างไหมที่จะส่องแสงบ้าง? ขอบคุณ

3
วิธีการเรียกใช้ Ubuntu โดยไม่มี GUI ใน Virtual Box
ฉันมีแล็ปท็อป Windows XP ที่ฉันใช้ VirtualBox กับ Ubuntu ล่าสุดฮาร์ดแวร์ของฉันค่อนข้างเก่าดังนั้นการเรียกใช้ Ubuntu รุ่นล่าสุดภายในกล่องเสมือนเป็นสิ่งที่ยุ่งยากการแสดงช้ามากแม้ว่าฉันจะทำอะไรก็ตาม กำลังรัน terminal และฝึกคำสั่ง Linux! ฉันพยายาม DSL (Damn Small Linux) กับ VirtualBox ของฉัน distro ขนาดเล็กมาก (50 MB) ฉันพอใจกับระบบของฉันที่เร็วขึ้น แต่ตอนนี้ฉันคิดถึง Ubuntu ยิ่งกว่านั้น DSL ยังขาดคำสั่งมากเกินไปเช่น sed มาก อื่น ๆ ที่ฉันจำไม่ได้ เป็นไปได้ไหมที่จะใช้งาน Ubuntu ในโหมดคอนโซลไม่มี GUI หรือ GUI ขั้นต่ำ ... ไม่มีเอฟเฟกต์ที่สวยงามใด ๆ ลิงค์ / บทช่วยสอนจะได้รับการชื่นชมมาก

3
เหตุใดการเปลี่ยนเส้นทางเอาต์พุต sed ไปยังไฟล์อินพุตเดียวกันทำให้เครื่องของฉันไม่ตอบสนอง
ฉันพยายามsedแทนที่คำหลักบางคำในไฟล์ขนาดใหญ่ (100 MB) ฉันไม่รู้-iตัวเลือก (inplace) ดังนั้นความพยายามครั้งแรกของฉันคือเปลี่ยนเส้นทางดังนี้: sed 's/original/edited/g' file.log >> file.log เกิดอะไรขึ้นหลังจากนั้นก็คือว่าพีซีของฉันหยุดชะงักแทบจะไม่มีการป้อนข้อมูลด้วยแป้นพิมพ์ ฉันพยายามที่แตกต่างกันคอนโซลCtrl+ Alt+ F1แต่หลังจากที่ช้าป้อนชื่อผู้ใช้ก็หยุดเกินไป ไม่มีคีย์บอร์ดตัวเลือกเดียวของฉันคือการรีเซ็ตฮาร์ดแวร์ของเครื่อง หลังจากเข้าสู่ระบบฉันเห็นว่า file.log มีขนาดประมาณ 8 GB ฉันอยากจะเข้าใจว่าทำไมการดำเนินการของคำสั่งนั้นจึงทำให้ระบบไม่ตอบสนองและหากมีกลไกที่ระดับระบบเพื่อกระตุ้นการแจ้งเตือนและฆ่ากระบวนการที่กระทำผิด
13 command-line  sed 

5
การจัดการข้อความด้วย sed
ขณะนี้ฉันมีไฟล์ข้อความหลายไฟล์ที่มีเนื้อหาที่มีลักษณะเช่นนี้ (มีหลายบรรทัด): 565 0 10 12 23 18 17 25 564 1 7 12 13 16 18 40 29 15 ฉันต้องการเปลี่ยนแต่ละบรรทัดเพื่อให้มีรูปแบบต่อไปนี้: 0 565:10:1 565:12:1 565:23:1 565:18:1 565:17:1 565:25:1 1 564:7:1 564:12:1 564:13:1 564:16:1 564:18:1 564:40:1 564:29:1 564:15:1 มีวิธีการทำข้างต้นโดยใช้ sed หรือไม่ หรือฉันต้องหันไปใช้ Python?

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