このファイルがあります。
1 deiauk David Smith from California 12 58
2 edvin from Nevada 12 5 8 95 2 48 5
3 jaco My Name Is Jacob I'm from NY 5 6 845 156 585
4 from Miami
特定の単語の後にある値を取得する必要があります。from
シェルでこれを行うことはできますか?私の出力は
California
Nevada
NY
Miami
答え1
を使用するには、grep
次のようにします。
grep -oP "from\s+\K\w+" input.txt
ここでは、
-o ==> option for printing only the matching part of the line
-P ==> use perl-regexp
\K ==> do not print that comes before \K (zero-width look-behind assertion)
\w ==> match word characters
答え2
または:
awk '{for (I=1;I<NF;I++) if ($I == "from") print $(I+1)}' file
答え3
読みやすい解決策は次のとおりです。
awk -F '${fixed_string}' '{print $2}' file | awk '{print $1}'
できること:
-F '${fixed_string}'
入力を与えられた文字列の前後に分割します。したがって、ファイルを設定すると、次のようにfixed_string='from'
なりprint $2
ます。California 12 58 Nevada 12 5 8 95 2 48 5 NY 5 6 845 156 585 Miami
今必要なのは、この入力の最初の列だけです。したがって、最初の出力を
awk
パイプawk
し、最初の列を印刷します。
答え4
ファイル名がtest.txtであるとします。
$ cat test.txt
deiauk David Smith from California 12 58
edvin from Nevada 12 5 8 95 2 48 5
jaco My Name Is Jacob I'm from NY 5 6 845 156 585
from Miami
grepを使ってすべてをsed
見つけることができ、from
出力はcut
次のようになります。
$ cat test.txt | sed 's/.*from //' | cut -d " " -f 1
California
Nevada
NY
Miami