grep一个模式,找出这行的最后一个单词



我试图搜索一个每行只包含四个单词序列的文件,即该文件看起来像

walked the dog fast
jumped the moon high
on my nothing sun
on my not grass

我的代码看起来像

LINE=$(grep "^$PREV_THREE $PREV_TWO $PREV_ONE" $INPUT_FILE)
NEXT_WORD="${LINE##* }"

我使用$PREV_THREE $PREV_TWO $PREV_ONE作为三个单词来指示从特定行中获取第四个单词。我的问题是,当$PREV_THREE $PREV_TWO $PREV_ONE等于on my not时,它将NEXT_WORD设置为等于sun而不是grass。有没有一种优雅的方法可以对前三个单词进行Grep,以找到的完美匹配,然后设置在第四个单词旁边?而不是我上面的东西,它只是发现了我的模式的出现。

使用单个awk命令更容易:

awk -v p='$PREV_THREE $PREV_TWO $PREV_ONE ' '$0 ~ p {print $4}' "$INPUT_FILE"
grass

顺便说一句,你的grep也可以在最后一个搜索词后面有一个尾随空格,以确保你不匹配部分单词。考虑这个gnu grep:

grep -oP "^$PREV_THREE $PREV_TWO $PREV_ONE K.+" $INPUT_FILE
grass

最新更新