我如何提取bash中某个特定单词之后的单词?更准确地说,我有一个文件,其中的行如下所示:
Demo.txt
IN=../files/d
out=../files/d
dataload
name
我想从上面的行中读取“ d”。
sed -n '/\/files\// s~.*/files/\([^.]*\)\..*~\1~p' file
如果行中包含“。”,则此代码有帮助。
IN=../files/d.txt
因此其打印为“ d”
这里有“ d”,没有“。”作为末端分度计。所以我想读到行尾。 i / p:
Demo.txt
IN=../files/d
out=../files/d
dataload
name
输出寻找:
d
d
代码:以bash格式
答案 0 :(得分:0)
此sed
变体应为您工作:
sed -n '/\/files\// s~.*/files/\([^.]*\).*~\1~p' file
d
d
与较早的sed
相比,有一个小的变化是它与第一个捕获组之后的\.
不匹配。
答案 1 :(得分:0)
您可以在PCRE中使用GNU grep
:
grep -oP '/files/\K[^.]+' file
-P
标志使grep
使用PCRE,-o
使其仅显示匹配的部分,而不显示完整的行,而正则表达式中的\K
省略了什么从显示的匹配部分开始。
或者,如果您无权访问GNU grep,则以下perl
命令将具有相同的效果:
perl -nle 'print $& if m{/files/\K[^.]+}' file
答案 2 :(得分:0)
当您不想考虑单个命令解决方案时,可以使用
grep -Eo "/files/." Demo.txt | cut -d/ -f3