在特定单词后获取值

在特定单词后获取值

我有这个文件

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

您可以使用sedgrep 来查找所有内容,然后from输出cut如下所示。

$ cat test.txt | sed 's/.*from //' | cut -d " " -f 1
California
Nevada
NY
Miami

相关内容