私の結果は次のとおりです。
scott name1;tiger name2;elephant name3;mouse name4;bla1 name5;bla2 name6
「scott」を検索し、「name1」という文字列だけを取得したいと思います。 sedを使用してどのようにこれを達成できますか?
答え1
より詳細な解決策:
echo "scott name1;tiger name2;elephant name3;mouse name4;bla1 name5;bla2 name6" \
| tr ';' '\n' | grep "scott" | cut -d ' ' -f 2
答え2
awkを使用してください:
echo "scott name1;tiger name2;elephant name3;mouse name4;bla1 name5;bla2 name6" \
| awk -v RS=\; '$1=="scott"{print $2}'
レコード区切り文字は、文字列をレコードの最初のフィールドとしてキャプチャするRS
ように設定されます。見つかったら、2番目のフィールドが印刷されます。;
scott
$1
$2
答え3
この試み、
echo "scott name1;tiger name2;elephant name3;mouse name4;bla1 name5;bla2 name6" \
| sed -n -e 's/^scott \(\w\+\);.*/\1/p'
"scott"と";"間の文字列を逆参照してください。
答え4
そしてsed
:
$ echo "scott name1;tiger name2;elephant name3;mouse name4;bla1 name5;bla2 name6" \
| sed -n 's/\(^\|.*;\)scott \([^;]*\).*/\2/p'
name1
または「トラ」を使用して下さい:
$ echo "scott name1;tiger name2;elephant name3;mouse name4;bla1 name5;bla2 name6" \
| sed -n 's/\(^\|.*;\)tiger \([^;]*\).*/\2/p'
name2
sed -n
パターン空間の自動印刷を無効にするs/
変える\(^\|.*;\)
)を使用して、最初のキャプチャグループとして行の先頭^
またはセミコロンの後のすべての文字と一致します。.*;
\(...\
scott
"scott"の後にスペース文字が続くものと一致します。\([^;]*\)
2番目のキャプチャグループは、セミコロン以外の文字(必要な部分)と一致します。.*
次のいずれかの文字と一致/\2/
2番目のキャプチャグループに置き換えられましたp
マッチ印刷