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

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

7
ฉันจะประสบความสำเร็จในการพกพาได้ด้วย sed -i (การแก้ไขในสถานที่) ได้อย่างไร
ฉันกำลังเขียนเชลล์สคริปต์สำหรับเซิร์ฟเวอร์ของฉันซึ่งเป็นโฮสติ้งที่ใช้ร่วมกันที่ใช้ FreeBSD ฉันยังต้องการที่จะทดสอบพวกเขาในพื้นที่บนพีซีของฉันที่ใช้ Linux ดังนั้นฉันพยายามเขียนแบบพกพา แต่sedฉันไม่เห็นวิธีการทำ ส่วนหนึ่งของเว็บไซต์ของฉันใช้ไฟล์ HTML แบบคงที่ที่สร้างขึ้นและบรรทัด sed นี้แทรก DOCTYPE ที่ถูกต้องหลังจากการสร้างใหม่แต่ละครั้ง: sed -i '1s/^/<!DOCTYPE html> \n/' ${file_name.html} มันทำงานร่วมกับ GNU sedบน Linux แต่ FreeBSD sedคาดว่าอาร์กิวเมนต์แรกหลังจาก-iตัวเลือกที่จะเป็นส่วนขยายสำหรับสำเนาสำรอง นี่คือลักษณะ: sed -i '' '1s/^/<!DOCTYPE html> \n/' ${file_name.html} อย่างไรก็ตาม GNU ในทางกลับกันคาดว่าการแสดงออกที่จะปฏิบัติตามทันทีหลังจากที่sed -i(นอกจากนี้ยังต้องการการแก้ไขด้วยการจัดการบรรทัดใหม่ แต่ได้รับคำตอบแล้วในที่นี้ ) แน่นอนว่าฉันสามารถรวมการเปลี่ยนแปลงนี้ไว้ในสำเนาเซิร์ฟเวอร์ของสคริปต์ แต่นั่นอาจทำให้เกิดความยุ่งเหยิงเช่นการใช้ VCS สำหรับการกำหนดเวอร์ชัน มีวิธีในการบรรลุสิ่งนี้ด้วย sed แบบพกพาอย่างเต็มที่?

2
การลบศูนย์นำหน้าออกจากวันที่
ฉันสร้างนามแฝงของคำสั่ง date เพื่อแสดงวันที่ในรูปแบบต่อไปนี้: 2013.06.14.12.10.02 ใช้คำสั่งนี้: alias date = date +"%Y.%m.%d.%H.%M.%S" ทุกอย่างใช้งานได้ดียกเว้นฉันต้องการเอาเลขศูนย์นำออกจากผลลัพธ์ ไม่มีวิธีที่จะทำให้มันเกิดขึ้นได้โดยการเปลี่ยนรูปแบบ ฉันคิดว่ามันสามารถทำได้โดยเฉพาะท่อส่งออกไปยังคำสั่งอื่น ๆ เช่นและsedawk ระบบปฏิบัติการที่ฉันใช้คือ Ubuntu 12.04.2 LTS
40 sed  awk  date 

11
เพิ่มเติมด้วย 'sed'
ฉันพยายามดำเนินการทางคณิตศาสตร์ด้วยsedแต่ก็ยังคงรักษาตัวแปรของฉันเป็นสตริง อินพุตเป็นแบบนี้: $ echo 12 | sed 's/[0-9]*/&+3/' $ 12+3 ฉันต้องการที่จะมี 15 เป็นเอาท์พุท ฉันต้องทำการดำเนินการและแทนที่ผลลัพธ์ทางคณิตศาสตร์ในข้อความเดียวเท่านั้นเพราะฉันกำลังเรียกใช้โปรแกรมเป็น Python daemon และฉันต้องการหลีกเลี่ยงข้อความเช่นการเปลี่ยนเส้นทางstdoutบนไฟล์เปิดไฟล์เหล่านั้นดำเนินการดึงผลลัพธ์ทำ การเปลี่ยน สำหรับฉันsedดูเหมือนว่าดีที่สุดในการแสดงทั้งหมดในบรรทัดเดียว ฉันพยายามโยนทั้งอินพุตและเอาต์พุตในรูปแบบต่าง ๆ เช่น $ echo 12 | sed 's/[0-9]*/int(&+3)/' $ echo 12 | sed 's/[0-9]*/\int(&+3)/' $ echo 12 | sed 's/[0-9]*/\int(&+3)/' แต่ผลลัพธ์ที่ได้คือการพิมพ์ฟิลด์ที่สองเสมอ
40 sed  math 

4
ทำการร้องขอเพื่อยืนยันก่อนการเปลี่ยนแต่ละครั้งหรือไม่
มีวิธีที่จะทำให้ sed ขอให้ฉันยืนยันก่อนที่จะเปลี่ยนแต่ละครั้งหรือไม่ บางสิ่งที่คล้ายกับ 'c' เมื่อใช้แทนที่ส่วนภายในเป็นกลุ่ม sed ทำเช่นนี้ได้ทั้งหมดหรือไม่?
37 vim  sed 

9
คุณจะรวมบรรทัดทั้งหมดที่ลงท้ายด้วยอักขระเครื่องหมายทับขวาได้อย่างไร
การใช้เครื่องมือบรรทัดคำสั่งทั่วไปเช่น sed หรือ awk เป็นไปได้หรือไม่ที่จะรวมบรรทัดทั้งหมดที่ลงท้ายด้วยอักขระที่กำหนดเช่นแบ็กสแลช? ตัวอย่างเช่นให้ไฟล์: foo bar \ bash \ baz dude \ happy ฉันต้องการเอาท์พุทนี้: foo bar bash baz dude happy

2
เข้าร่วมหลายคำสั่ง sed ในหนึ่งสคริปต์เพื่อประมวลผลไฟล์ CSV
มีไฟล์ CSV ดังนี้: HEADER "first, column"|"second "some random quotes" column"|"third ol' column" FOOTER และมองหาผลลัพธ์เช่น: HEADER first, column|second "some random quotes" column|third ol' column กล่าวอีกนัยหนึ่งคือการลบ "FOOTER" เครื่องหมายคำพูดในจุดเริ่มต้นจุดสิ้นสุดและรอบ ๆ | จนถึงตอนนี้รหัสนี้ทำงาน: sed '/FOOTER/d' csv > csv1 | #remove FOOTER sed 's/^\"//' csv1 > csv2 | #remove quote at the beginning sed 's/\"$//' …
34 sed  csv 


3
sed สามารถบันทึกเอาต์พุตไปยังไฟล์ได้หรือไม่?
> สามารถทำได้ echo "text" > file tee สามารถทำได้ echo "test" | tee file สามารถsedทำได้โดยไม่ใช้ข้อใดข้อหนึ่งข้างต้นหรือไม่ เป็นไปได้หรือไม่ที่จะบันทึกเอาต์พุตของsedคำสั่งไปยังไฟล์โดยไม่ใช้อย่างใดอย่างหนึ่ง>หรือtee?

4
ลบ n ไบต์แรกของไฟล์
ฉันมีปัญหามากและวิธีแก้ไขทั้งหมดที่ฉันจินตนาการได้นั้นซับซ้อน จากประสบการณ์ UNIX / Linux ของฉันต้องมีวิธีที่ง่าย ฉันต้องการที่จะลบ 31 /foo/ไบต์แรกของแต่ละแฟ้มใน แต่ละไฟล์มีความยาวเพียงพอ ฉันแน่ใจว่าใครบางคนจะส่งมอบวิธีแก้ปัญหาที่ง่ายอย่างเหลือเชื่อให้กับฉันฉันไม่สามารถจินตนาการได้ อาจจะตกใจ

3
ฉันจะรับคำสั่ง sed เพื่อทำการเปลี่ยนแปลงถาวรกับไฟล์ได้อย่างไร?
เป็นไปได้ไหม ฉันอ่านบางที่คำสั่งต่อไปนี้จะทำ: sed -e [คำสั่ง] [ไฟล์] แต่ดูเหมือนว่าจะทำเช่นเดียวกับเพียง sed [คำสั่ง] [ไฟล์] (ไม่ได้บันทึกการเปลี่ยนแปลง) มีวิธีการทำเช่นนี้โดยใช้ sed หรือไม่
32 sed 

10
วิธีแทรกเนื้อหาของไฟล์ลงในไฟล์อื่นก่อนรูปแบบ (เครื่องหมาย)?
File1 เนื้อหา: line1-file1 "1" line2-file1 "2" line3-file1 "3" line4-file1 "4" File2 เนื้อหา: line1-file2 "25" line2-file2 "24" Pointer-file2 "23" line4-file2 "22" line5-file2 "21" หลังจากการดำเนินการของ perl / shell script File2เนื้อหาควรเป็น: line1-file2 "25" line2-file2 "24" line1-file1 "1" line2-file1 "2" line3-file1 "3" line4-file1 "4" Pointer-file2 "23" line4-file2 "22" line5-file2 "21" เช่นวางเนื้อหาFile1ในFile2ก่อนบรรทัดที่มี "ตัวชี้"

3
sed - วิธีที่จะทำการทดแทนต่อเนื่องหลายรายการ แต่ประมวลผลไฟล์เพียงครั้งเดียว?
หากฉันกำลังทำการทดแทนหลายอย่างซึ่งจำเป็นต้องต่อเนื่องกันเช่น sed -i '/^[[:space:]]*browser.*\.should/s/browser/expect(browser/' t1_spec.rb sed -i '/expect(browser.*\.should/s/\.should/).should/' t1_spec.rb sed -i 's/\.should/\.to/' t1_spec.rb sed -i 's/==/eq/' t1_spec.rb มีวิธีที่ดีกว่าในการทำเช่นนี้ที่จะผ่าน t1_spec.file เพียงครั้งเดียวและทำการทดแทน 4 ครั้งสำหรับแต่ละบรรทัดแทนที่จะไปผ่านไฟล์ 4 ครั้งหรือไม่
31 sed 

3
ฉันจะแทนที่การเกิดขึ้นครั้งสุดท้ายของอักขระในสตริงโดยใช้ sed ได้อย่างไร
ฉันจะแทนที่การเกิดขึ้นครั้งสุดท้ายของ "-" ในสตริงที่มีช่องว่างได้sedอย่างไร? ตัวอย่างเช่น: echo $MASTER_DISK_RELEASE swp-RedHat-Linux-OS-5.5.0.0-03 แต่ฉันต้องการได้ผลลัพธ์ต่อไปนี้ (แทนที่เครื่องหมายขีดคั่นสุดท้าย [“ -“] ด้วยช่องว่าง) swp-RedHat-Linux-OS-5.5.0.0 03

9
ฉันจะลบบรรทัดแรกและบรรทัดสุดท้ายของไฟล์โดยใช้คำสั่งเชลล์ได้อย่างไร
ฉันมีไฟล์ชื่อElement_queryที่มีผลลัพธ์ของแบบสอบถาม: SQL> select count (*) from element; [Output of the query which I want to keep in my file] SQL> spool off; ฉันต้องการลบบรรทัดที่ 1 และบรรทัดสุดท้ายโดยใช้คำสั่งเชลล์
31 shell  sed  awk  grep  pipe 

6
จะใช้คำสั่ง shell เพื่อแสดงเฉพาะคอลัมน์แรกและคอลัมน์สุดท้ายในไฟล์ข้อความได้อย่างไร
ฉันต้องการความช่วยเหลือในการหาวิธีใช้คำสั่ง sed เพื่อแสดงเฉพาะคอลัมน์แรกและคอลัมน์สุดท้ายในไฟล์ข้อความ นี่คือสิ่งที่ฉันมีจนถึงคอลัมน์ 1: cat logfile | sed 's/\|/ /'|awk '{print $1}' ความพยายามที่อ่อนแอของฉันในการทำให้คอลัมน์สุดท้ายแสดงเช่นกันคือ: cat logfile | sed 's/\|/ /'|awk '{print $1}{print $8}' อย่างไรก็ตามการดำเนินการนี้จะใช้คอลัมน์แรกและคอลัมน์สุดท้ายแล้วรวมเข้าด้วยกันในรายการเดียว มีวิธีพิมพ์คอลัมน์แรกและคอลัมน์สุดท้ายอย่างชัดเจนด้วยคำสั่ง sed และ awk หรือไม่? ตัวอย่างอินพุต: foo|dog|cat|mouse|lion|ox|tiger|bar
30 shell  sed  awk 

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