を使用して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
$
GNU sed
を使用したRHEL 5 Linuxでテストしますが、UNIXの7th Edition UNIX™バージョンで機能する機能のみを使用してsed
ください。
ちなみに、もう少し簡単な方法は、2つの代替コマンドを使用することです。最初の二重引用符までのすべてを空の文字列に変更します(これは、二重引用符が続く0個以上の非引用符のシーケンスです)。現在の最初の二重引用符の後をすべて無に変更します。
sed 's/^[^"]*"//; s/".*//'
ちなみに、試してみたコマンド( `sed -n '/" /、/ "/ p')は、二重引用符を含む行から二重引用符を含む次の行まで、行をまったく編集せずに印刷します。それがあなたのために動作しないように思われた理由です-それはあなたが尋ねたものを行いましたが、あなたがそれをするように頼んだことはあなたがそれをするように意図したものではありませんでした。
効率的には、パフォーマンスに測定可能な差が生じることはほとんどありません。メンテナンスの容易さの観点から、後者は脳細胞への負担が少ないと思われます。