我有这个文件
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
可以在 shell 中做到这一点吗?我的输出应该是
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
您可以使用sed
grep 来查找所有内容,然后from
输出cut
如下所示。
$ cat test.txt | sed 's/.*from //' | cut -d " " -f 1
California
Nevada
NY
Miami