有一个存储少量值的变量,需要用特定的单词grep行"是"在第一次出现特定单词后#34;结束"

时间:2017-09-03 11:10:55

标签: awk sed grep

有一个存储少量值的变量,需要用特定的单词grep行"是"。但是只需要在第一次出现特定单词后才进行grep,例如"结束"

考虑下面的行变量值

one
two
three          yes
------End------
wind
tree
fruits         yes 
------End------
hi
hello         yes

从变量中,需要grep所有具有" yes"的行。在第一次出现单词End

之后

预期产出:

fruits         yes
hello         yes

2 个答案:

答案 0 :(得分:1)

使用awk:

$ awk '/End/{p=1}p==1&&/yes/' file
fruits         yes 
hello         yes

说明:

awk '
/End/ { p=1 }  # the End set p flag to 1
p==1 && /yes/  # when p flag raised and at yes, output
' file

如果您希望在第二次End更改p=1更改为p++后将比较p==1更改为p>=2

答案 1 :(得分:0)

使用GNU sed

$ sed -n '/End/,${/yes/p}' file 
fruits         yes
hello         yes

如果您有变量中的数据:

$ printf '%s\n' "$variable" | sed -n '/End/,${/yes/p}'
fruits         yes
hello         yes

保存在变量中:

$ new_variable=$(printf '%s\n' "$variable" | sed -n '/End/,${/yes/p}')

sed脚本将打印包含字符串yes(包含/yes/p)的所有行,但仅限于第一次出现单词End之后的那些行(在/End/,$范围内,即从包含End到结尾的行。)