Kullanma sed
:
sed 's/^[^"]*"\([^"]*\)".*/\1/'
Şuna benzer: satır başı, bir dizi tırnaksız, bir çift tırnak, bir dizi tırnaksız, bir çift tırnak ve hatta başka bir şey yakalar ve yakalanan malzeme ile değiştirir.
$ 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
$
GNU ile RHEL 5 Linux üzerinde test edin sed
, ancak yalnızca 7. Sürüm UNIX ™ sürümünde çalışacak özellikleri kullanın sed
.
Bu arada, bunu yapmanın biraz daha basit bir yolu iki yedek komuttur; ilk çift tırnak işaretini boş bir dizeye (bu sıfır veya daha fazla tırnak işareti ve ardından çift tırnak işareti) içeren her şeyi değiştirin; şimdi ilk çift alıntı olan şeyden sonra her şeyi değiştirin:
sed 's/^[^"]*"//; s/".*//'
Bu arada, denediğiniz komut (`sed -n '/" /, / "/ p'), çift tırnak içeren bir satırdan, çift tırnak içeren bir sonraki satıra, satırları düzenlemeden yazdırır. Bu yüzden sizin için işe yaramıyordu - sorduğunuz şeyi yaptı, ancak yapmasını istediğiniz şey, yapmasını istemediğiniz şey değildi.
Verimlilik açısından, performansta ölçülebilir bir fark olması olası değildir. Bakım kolaylığı açısından, ikincisinin beyin hücrelerine daha az vergi yüklediğinden şüpheleniyorum.