ฉันจะสร้างsed
บรรทัดการจับคู่ตัวกรองตามนิพจน์บางส่วนได้อย่างไร แต่ไม่สนใจบรรทัดที่ไม่ตรงกันแทนที่จะปล่อยให้พิมพ์
ตามตัวอย่างจริงฉันต้องการเรียกใช้scalac
(คอมไพเลอร์ Scala) ในชุดไฟล์และอ่านจาก-verbose
ผลลัพธ์ของ.class
ไฟล์ที่สร้างขึ้น scalac -verbose
ส่งออกข้อความจำนวนมาก แต่เราสนใจเฉพาะในรูปแบบ[wrote some-class-name.class]
เท่านั้น สิ่งที่ฉันกำลังทำอยู่คือสิ่งนี้ ( |&
เป็นวิธี bash 4.0 ในการไพพ์ stderr ไปยังโปรแกรมถัดไป)
$ scalac -verbose some-file.scala ... |& sed 's/^\[wrote \(.*\.class\)\]$/\1/'
การดำเนินการนี้จะดึงชื่อไฟล์ออกจากข้อความที่เราสนใจ แต่จะปล่อยให้ข้อความอื่น ๆ ผ่านไปโดยไม่เปลี่ยนแปลง! แน่นอนว่าเราสามารถทำสิ่งนี้แทนได้:
$ scalac -verbose some-file.scala ... |& grep '^\[wrote .*\.class\]$' |
sed 's/^\[wrote \(.*\.class\)\]$/\1/'
ซึ่งใช้งานได้ แต่ดูเหมือนการแก้ไขปัญหาที่แท้จริงซึ่งเป็นวิธีการสั่งsed
ให้ละเว้นบรรทัดที่ไม่ตรงกันจากอินพุต แล้วเราจะทำอย่างไร?