有一个存储少量值的变量,需要用特定的单词grep行"是"。但是只需要在第一次出现特定单词后才进行grep,例如"结束"
考虑下面的行变量值
one
two
three yes
------End------
wind
tree
fruits yes
------End------
hi
hello yes
从变量中,需要grep所有具有" yes"的行。在第一次出现单词End
之后预期产出:
fruits yes
hello yes
答案 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
到结尾的行。)