入力する:
<e1 name="file1" id="id1" anotherId="id2">
希望の出力:
file1
次のように必要なものを入手できます。
echo '<e1 name="file1" id="id1" anotherId="id2">' | sed 's/\(.*name="\)\(.*\)\(".*\)/\2/' | sed 's/".*//'
出力:file1
可能であれば、コマンドセットを改善し、sedの最後のパイプを削除したいと思います。 sedの最後のパイプを削除すると、目的の結果が得られません。
echo '<e1 name="file1" id="id1" anotherId="id2">' | sed 's/\(.*name="\)\(.*\)\(".*\)/\2/'
出力:
file1" id="id1" anotherId="id2
ご覧のとおり、sedはfile1の後の最初の引用符ではなく、最後の引用符を選択しました。
誰でもこのコマンドを改善するのに役立ちますか?
ベストアンサー1
echo '<e1 name="file1" id="id1" anotherId="id2">' |
sed -n 's/.*name="\([^"]*\)".*/\1/p'
またはGNUを使用する(grep
PCREサポートで構築されている場合):
echo '<e1 name="file1" id="id1" anotherId="id2">' |
grep -Po 'name="\K[^"]*'