如何使用 cut 查找给定模式后的单词?

如何使用 cut 查找给定模式后的单词?

我有一个如下所示的文件:

-config1
-config2 param2
-config3 param3a param3b
-config4 param4

我可以使用以下内容来提取param2

echo $(<file) | cut -d' ' -f3

不过,我想修复它,以便我总是在之后得到单词 -config2,这样,如果重新排列这些内容或插入某些内容,我的命令仍然有效。我应该看什么?

澄清:任何给定行上可能有多个参数(或根本没有),但-config每行始终最多有一个选项。

答案1

我会为此使用 awk

awk '/^-config2/ {print $2}' file

它打印以 开头的行的第二个参数-config2。表示^行的开头。

答案2

尝试这个:

perl -ne 'if (/-config2\s*(.*)/) { print "$1\n"; }'

这会查找匹配的行-config2,然后打印该行的其余部分(\s*匹配任意数量的空白,(.*) 匹配任何内容并将其绑定到$1)。

我之前的回答,假设后面-config2跟着一个单词:

perl -ne 'if (/-config2\s*(\S+)/) { print "$1\n"; }'

这会查找匹配的行-config2,然后打印其后的第一个标记(\s*匹配任意数量的空白,(\S+)匹配非空白字符的非空序列并将其绑定到$1)。

答案3

sed 的变体:

sed -n 's/^-config2 //p' file

-n抑制自动打印

s/^-config2 //行中的替换-config2和尾随空格在模式空间中以任何内容开头

p打印图案空间

相关内容