Linux 在同一行的特定单词后提取一个单词
在Linux(csh)中,如何提取特定单词后面的单词? 更准确地说,我有一个文件,它只有一行,如下所示:Linux 在同一行的特定单词后提取一个单词,linux,bash,csh,Linux,Bash,Csh,在Linux(csh)中,如何提取特定单词后面的单词? 更准确地说,我有一个文件,它只有一行,如下所示: [some useless data] --pe_cnt 100 --rd_cnt 1000 [some more data] [一些无用的数据]-pe\u cnt 100--rd\u cnt 1000[一些更多的数据] 我想提取100这个数字,它位于--pe\u cnt单词之后。 我不能使用sed,因为只有当您想提取整行内容时,sed才起作用。也许我可以用awk 另外,我有多个具有不同值的
[some useless data] --pe_cnt 100 --rd_cnt 1000 [some more data]
[一些无用的数据]-pe\u cnt 100--rd\u cnt 1000[一些更多的数据]
我想提取100
这个数字,它位于--pe\u cnt
单词之后。
我不能使用sed,因为只有当您想提取整行内容时,sed才起作用。也许我可以用awk
另外,我有多个具有不同值的文件,而不是
100
,因此我需要一些提取值但不依赖于值的文件。您可以使用sed。只需制作一组您想要匹配的内容,并用该组内容替换整行内容:
sed -n 's/^.*pe_cnt\s\+\([0-9]\+\).*$/\1/p' file
使用awk
:
awk '{for(i=1;i<=NF;i++) if ($i=="--pe_cnt") print $(i+1)}' inputFile
如果
--pe_cnt
和100
之间有一个空格字符,则可以使用前向和后向断言
grep -oP '(?<=--pe_cnt\s)\d+(?=\s+--rd_cnt)'
grep-oP'(?这可能是最短的版本:
grep -oP 'pe_cnt \K[^ ]+' file
“awk”是一种可能性。例如,echo54 | awk'{print$2}'
应该显示“4”。你需要在grep中的lookback模式末尾添加一个空格。是的,抱歉没有测试它。谢谢!:)注意:Mac OSX 10.8上的grep
没有.JS웃: 非常感谢您的快速回复。第一个命令非常有效!第二个命令没有给出任何输出。你的回答对我帮助很大。谢谢,您可能甚至不需要--rd\u cnt
,以下选项是否合适并不一定重要。谢谢你的提示。我是Linux的新手,所以这些技巧帮助很大。以前的模式中有一个错误,但现在已经修复了。
grep -oP 'pe_cnt \K[^ ]+' file