我如何提取bash中某个特定单词之后的单词?更准确地说,我有一个文件,其中的行如下所示:
IN=../files/d.txt
我想从上一行读取“ d”。
awk '{for(i=1;i<=NF;i++) if ($i=="files/") print $(i+1)}' inputFile
此代码无济于事,因为它试图逐字逐句。但是在这里,我们在“ files /”(连续词)之后有“ d”,并以“。”结尾。
答案 0 :(得分:0)
您可以对此使用后视(?<= match-before)。
echo "IN=../files/d.txt" | grep -Po "(?<=files\/)\w+"
结果:
d
答案 1 :(得分:0)
您可以使用sed
:
sed -n '/\/files\// s~.*/files/\([^.]*\)\..*~\1~p' file
d
您也可以使用awk
命令:
awk -F/ '$(NF-1) == "files"{sub(/\..*/, "", $NF); print $NF}' file
答案 2 :(得分:0)
使用bash模式替换和basename
(因为您的输入数据看起来像文件名):
basename ${IN%.*}