การใช้sed
:
sed 's/^[^"]*"\([^"]*\)".*/\1/'
ที่มองหา: จุดเริ่มต้นของบรรทัดชุดของราคาที่ไม่ใช่อัญประกาศคู่จับชุดของราคาที่ไม่ใช่อัญประกาศคู่และสิ่งอื่นใดในบรรทัดและแทนที่ด้วยวัสดุที่จับ
$ sed 's/^[^"]*"\([^"]*\)".*/\1/' <<'EOF'
> xyz... rsync: "/home/path/to/file": Permission denied (13) rsync:
> "/home/path/to/file1": Permission denied (13) rsync:
> "/home/path/to/file2": Permission denied (13) rsync:
> "/home/path/to/file3": Permission denied (13)
> EOF
/home/path/to/file
/home/path/to/file1
/home/path/to/file2
/home/path/to/file3
$
ทดสอบ RHEL 5 Linux กับ GNU sed
แต่ใช้คุณสมบัติที่จะได้ทำงานในรุ่นที่ 7 sed
ยูนิกซ์™รุ่น
อนึ่งวิธีที่ง่ายกว่าเล็กน้อยคือใช้คำสั่งทดแทนสองคำสั่ง เปลี่ยนทุกอย่างจนถึงและรวมเครื่องหมายคำพูดคู่แรกเป็นสตริงว่าง (นั่นคือลำดับของคำพูดที่ไม่ใช่ศูนย์หรือมากกว่าตามด้วยเครื่องหมายคำพูดคู่) เปลี่ยนทุกอย่างหลังจากสิ่งที่ตอนนี้อ้างสองครั้งแรกเพื่ออะไร:
sed 's/^[^"]*"//; s/".*//'
อนึ่งคำสั่งที่คุณลอง (`sed -n '/" /, / "/ p') พิมพ์จากบรรทัดหนึ่งที่มีเครื่องหมายคำพูดคู่ไปยังบรรทัดถัดไปที่มีเครื่องหมายคำพูดคู่โดยไม่ต้องแก้ไขบรรทัดเลย ซึ่งเป็นเหตุผลว่าทำไมมันถึงไม่เหมาะกับคุณ - ทำในสิ่งที่คุณถาม แต่สิ่งที่คุณขอให้ทำไม่ใช่สิ่งที่คุณตั้งใจจะขอให้ทำ
ประสิทธิภาพฉลาดไม่น่าจะมีความแตกต่างที่วัดได้ในประสิทธิภาพ ในแง่ของความง่ายในการบำรุงรักษาฉันสงสัยว่าหลังจะเก็บภาษีได้น้อยลงในเซลล์สมอง