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

Sed (Stream EDitor) เป็นเครื่องมือแก้ไขบรรทัดคำสั่งสำหรับสภาพแวดล้อม POSIX Sed ประมวลผลไฟล์อย่างน้อยหนึ่งไฟล์ตามสคริปต์แก้ไขและเขียนผลลัพธ์ไปยังเอาต์พุตมาตรฐาน สร้างขึ้นที่ Bell Labs มาตั้งแต่กลางทศวรรษที่ 70

8
จะส่งออกเฉพาะกลุ่มที่ถูกจับได้อย่างไร
มีวิธีบอกsedให้ส่งออกเฉพาะกลุ่มที่จับหรือไม่ ตัวอย่างเช่นกำหนดอินพุต: This is a sample 123 text and some 987 numbers และรูปแบบ: /([\d]+)/ ฉันจะได้รับเพียง 123 และ 987 เอาท์พุทในวิธีการจัดรูปแบบโดยอ้างอิงกลับ?
277 regex  sed 

5
อะไรคือความแตกต่างระหว่าง Perl, Python, AWK และ sed? [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้มีแนวโน้มที่จะเรียกร้องการอภิปรายการโต้แย้งการหยั่งเสียงหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน8 ปีที่ผ่านมา แค่อยากรู้ว่าอะไรคือความแตกต่างที่สำคัญระหว่างพวกเขา และพลังของแต่ละภาษา (ซึ่งจะดีกว่าการใช้งาน) แก้ไข:ไม่ใช่ "vs. " ชอบหัวข้อเพียงแค่ข้อมูล

8
แทรกบรรทัดหลังการแข่งขันครั้งแรกโดยใช้ sed
ด้วยเหตุผลบางอย่างฉันไม่สามารถหาคำตอบที่ตรงไปตรงมากับเรื่องนี้ได้และฉันก็รู้สึกอึดอัดใจในขณะนี้ ฉันจะแทรกบรรทัดข้อความทางเลือกอย่างไรหลังจากบรรทัดแรกจับคู่สตริงที่ระบุโดยใช้sedคำสั่ง ฉันมี ... CLIENTSCRIPT="foo" CLIENTFILE="bar" และฉันต้องการแทรกบรรทัดหลังCLIENTSCRIPT=บรรทัดส่งผลให้ ... CLIENTSCRIPT="foo" CLIENTSCRIPT2="hello" CLIENTFILE="bar"
245 shell  sed 

7
ค้นหาและแทนที่ด้วย sed ในไดเรกทอรีและไดเรกทอรีย่อย
ฉันเรียกใช้คำสั่งนี้เพื่อค้นหาและแทนที่ 'apple' ด้วย 'ส้ม' ที่เกิดขึ้นในไฟล์ทั้งหมดในรูทของเว็บไซต์ของฉัน: find ./ -exec sed -i 's/apple/orange/g' {} \; แต่จะไม่ผ่านไดเรกทอรีย่อย เกิดอะไรขึ้นกับคำสั่งนี้? นี่คือผลลัพธ์บางส่วนของfind ./: ./index.php ./header.php ./fpd ./fpd/font ./fpd/font/desktop.ini ./fpd/font/courier.php ./fpd/font/symbol.php

13
ติดตั้งแบบแทนที่ธงซึ่งทำงานได้ทั้งบน Mac (BSD) และ Linux
มีการร้องขอsedการแก้ไขสิ่งที่ต้องทำแบบไม่มีการสำรองข้อมูลที่ทำงานทั้งบน Linux และ Mac หรือไม่? ในขณะที่ BSD sedจัดส่งมาพร้อมกับ OS X ดูเหมือนว่าต้องการsed -i '' …แต่การแจกจ่าย GNU sedLinux มักจะมาพร้อมกับการตีความคำพูดเป็นชื่อไฟล์อินพุตว่าง (แทนนามสกุลการสำรองข้อมูล) และต้องการsed -i …แทน มีไวยากรณ์บรรทัดคำสั่งใดบ้างที่ใช้ได้กับทั้งสองรสชาติดังนั้นฉันจึงสามารถใช้สคริปต์เดียวกันกับทั้งสองระบบได้หรือไม่
237 linux  macos  sed  bsd 


8
วิธีการแทนที่หลายรูปแบบพร้อมกันด้วย sed?
สมมติว่าฉันมีสตริง 'abbc' และฉันต้องการแทนที่: ab -> bc bc -> ab หากฉันลองทั้งสองแทนที่ผลลัพธ์จะไม่ใช่สิ่งที่ฉันต้องการ: echo 'abbc' | sed 's/ab/bc/g;s/bc/ab/g' abab ดังนั้นคำสั่ง sed ใดที่ฉันสามารถใช้เพื่อแทนที่ดังนี้ echo abbc | sed SED_COMMAND bcab แก้ไข : ที่จริงแล้วข้อความอาจมีรูปแบบมากกว่า 2 รูปแบบและฉันไม่ทราบว่าจะต้องแทนที่จำนวนเท่าไหร่ เนื่องจากมีคำตอบที่บอกว่าsedเป็นตัวแก้ไขสตรีมและการแทนที่มีความตะกละฉันคิดว่าฉันจะต้องใช้ภาษาสคริปต์สำหรับสิ่งนั้น
231 replace  syntax  sed 

13
เชลล์สคริปต์ - ลบอัญประกาศแรกและสุดท้าย (") ออกจากตัวแปร
ด้านล่างนี้เป็นตัวอย่างของเชลล์สคริปต์จากสคริปต์ที่ใหญ่กว่า มันลบคำพูดจากสตริงที่ถือโดยตัวแปร ฉันกำลังใช้ sed แต่มีประสิทธิภาพหรือไม่ ถ้าไม่เช่นนั้นวิธีที่มีประสิทธิภาพคืออะไร? #!/bin/sh opt="\"html\\test\\\"" temp=`echo $opt | sed 's/.\(.*\)/\1/' | sed 's/\(.*\)./\1/'` echo $temp
225 string  bash  shell  unix  sed 

11
จะแสดงเฉพาะบรรทัดถัดไปหลังจากจับคู่ได้อย่างไร
grep -A1 'blah' logfile ขอบคุณคำสั่งนี้สำหรับทุกบรรทัดที่มี 'blah' อยู่ในนั้นฉันได้รับเอาต์พุตของบรรทัดที่มี 'blah' และบรรทัดถัดไปที่ตามมาใน logfile อาจเป็นวิธีที่ง่าย แต่ฉันไม่สามารถหาวิธีเว้นบรรทัดที่มี 'blah' และแสดงเฉพาะบรรทัดถัดไปในผลลัพธ์ได้
218 awk  sed  grep 

23
จะใช้ sed เพื่อแทนที่เฉพาะสิ่งที่เกิดขึ้นครั้งแรกในไฟล์ได้อย่างไร?
ฉันต้องการอัปเดตไฟล์ต้นฉบับ C ++ จำนวนมากพร้อมกับคำสั่งพิเศษเพิ่มเติมก่อนที่จะมี #includes อยู่ สำหรับงานประเภทนี้ปกติฉันจะใช้สคริปต์ bash ขนาดเล็กที่มี sed เพื่อเขียนไฟล์อีกครั้ง ฉันจะได้รับsedการแทนที่เพียงแค่การเกิดขึ้นครั้งแรกของสตริงในไฟล์แทนที่การเกิดขึ้นทุกครั้งได้อย่างไร ถ้าฉันใช้ sed s/#include/#include "newfile.h"\n#include/ มันมาแทนที่ #includes ทั้งหมด ข้อเสนอแนะทางเลือกเพื่อให้บรรลุในสิ่งเดียวกันก็ยินดีต้อนรับ

15
วิธีแทรกข้อความที่จุดเริ่มต้นของไฟล์ได้อย่างไร
จนถึงตอนนี้ฉันสามารถค้นหาวิธีเพิ่มบรรทัดที่จุดเริ่มต้นของไฟล์ได้ แต่นั่นไม่ใช่สิ่งที่ฉันต้องการ ฉันจะแสดงมันเป็นตัวอย่าง เนื้อหาไฟล์ some text at the beginning ผลลัพธ์ <added text> some text at the beginning มันคล้ายกัน แต่ฉันไม่ต้องการสร้างบรรทัดใหม่ด้วย ... ฉันต้องการทำสิ่งนี้ด้วยsedถ้าเป็นไปได้
213 linux  bash  sed 

10
การแทนที่ตัวแปรสภาพแวดล้อมใน sed
หากฉันรันคำสั่งเหล่านี้จากสคริปต์: #my.sh PWD=bla sed 's/xxx/'$PWD'/' ... $ ./my.sh xxx bla ไม่เป็นไร แต่ถ้าฉันวิ่ง: #my.sh sed 's/xxx/'$PWD'/' ... $ ./my.sh $ sed: -e expression #1, char 8: Unknown option to `s' ฉันอ่านในบทช่วยสอนเกี่ยวกับการแทนที่ตัวแปรสภาพแวดล้อมจากเชลล์คุณต้องหยุดและ 'ออกใบเสนอราคา' $varnameส่วนนั้นเพื่อไม่ให้ถูกแทนที่โดยตรงซึ่งเป็นสิ่งที่ฉันทำและจะใช้ได้ผลก็ต่อเมื่อมีการกำหนดตัวแปรไว้ก่อน ฉันจะทำให้ sed รับรู้ a $varเป็นตัวแปรสภาพแวดล้อมตามที่กำหนดไว้ในเชลล์ได้อย่างไร
213 linux  unix  shell  sed 

13
คำสั่งเพื่อรับบรรทัดที่ n ของ STDOUT
มีคำสั่ง bash ใดบ้างที่จะให้คุณได้บรรทัดที่ n ของ STDOUT? กล่าวคือสิ่งที่จะใช้เวลานี้ $ ls -l -rw-r--r--@ 1 root wheel my.txt -rw-r--r--@ 1 root wheel files.txt -rw-r--r--@ 1 root wheel here.txt และทำสิ่งที่ชอบ $ ls -l | magic-command 2 -rw-r--r--@ 1 root wheel files.txt ฉันรู้ว่าสิ่งนี้จะเป็นวิธีปฏิบัติที่ไม่ดีเมื่อเขียนสคริปต์เพื่อนำมาใช้ซ้ำ แต่เมื่อทำงานกับเชลล์แบบวันต่อวันมันจะมีประโยชน์สำหรับฉันที่จะกรอง STDOUT ของฉันในลักษณะนี้ ฉันก็รู้ว่านี่จะเป็นคำสั่งแบบกึ่ง ๆ เขียน (buffer STDOUT ส่งคืนบรรทัดที่ระบุ) แต่ฉันต้องการทราบว่ามีคำสั่งเชลล์มาตรฐานบางอย่างที่จะทำสิ่งนี้ซึ่งจะพร้อมใช้งานโดยที่ฉันไม่ปล่อยสคริปต์ลง
210 bash  shell  sed  stdout 

9
เปลี่ยนหลายไฟล์
คำสั่งต่อไปนี้เป็นการเปลี่ยนแปลงเนื้อหาของ 2 ไฟล์อย่างถูกต้อง sed -i 's/abc/xyz/g' xaa1 xab1 แต่สิ่งที่ฉันต้องทำคือเปลี่ยนไฟล์หลาย ๆ ไฟล์แบบไดนามิกและฉันไม่รู้ชื่อไฟล์ ฉันต้องการเขียนคำสั่งที่จะอ่านไฟล์ทั้งหมดจากไดเรกทอรีปัจจุบันเริ่มต้นด้วยxa*และsedควรเปลี่ยนเนื้อหาไฟล์
194 sed 

4
รหัสคำสั่งที่ไม่ถูกต้องแม้จะมีระยะเวลาหลบหนีโดยใช้ sed
ถูกบังคับให้ใช้ CVS สำหรับไคลเอนต์ปัจจุบันและเปลี่ยนที่อยู่สำหรับ repo ระยะไกล วิธีเดียวที่ฉันสามารถค้นหาเพื่อเปลี่ยนที่อยู่ระยะไกลในรหัสท้องถิ่นของฉันคือการค้นหาซ้ำและแทนที่ อย่างไรก็ตามด้วยคำสั่ง sed ฉันคาดว่าจะทำงาน: find ./ -type f -exec sed -i "s/192.168.20.1/new.domain.com/" {} \; ฉันได้รับข้อผิดพลาดสำหรับไฟล์ทุกไฟล์: sed: 1: ".//file/path ...": invalid command code . ฉันพยายามที่จะหลบหนีจากช่วงเวลาในการแข่งขัน / แทนที่ แต่ไม่ได้แก้อะไรเลย
187 bash  macos  sed 

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