我试图搜索一个每行只包含四个单词序列的文件,即该文件看起来像
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