在同一行的特定单词之后提取一个单词,但它们之间没有空格

时间:2018-08-28 11:04:19

标签: bash shell unix

我如何提取bash中某个特定单词之后的单词?更准确地说,我有一个文件,其中的行如下所示:

IN=../files/d.txt

我想从上一行读取“ d”。

awk '{for(i=1;i<=NF;i++) if ($i=="files/") print $(i+1)}' inputFile

此代码无济于事,因为它试图逐字逐句。但是在这里,我们在“ files /”(连续词)之后有“ d”,并以“。”结尾。

3 个答案:

答案 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%.*}