我有一个如下所示的文件:
-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
打印图案空间