セミコロンの間にスペースで区切られたデータの使用

セミコロンの間にスペースで区切られたデータの使用

私の結果は次のとおりです。

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マッチ印刷

関連情報