首次搜索并打印直到下一个分隔符,但仅匹配整个单词

时间:2016-08-09 05:13:50

标签: bash sed

我有一个包含多行文字的文件,类似于:

foo
1
2
3
bar
fool
1
2
3
bar
food
1
2
3
bar

到目前为止,以下内容给出了一个更接近的答案:

sed -n '/foo/,/bar/ p' file.txt | sed -e '$d'

...但如果它遇到像" food"或者"傻瓜"。我想让上面的代码只进行整个单词匹配(即grep -w),但插入\ b开关似乎不起作用:

sed -n '/foo/\b,/bar/ p' file.txt | sed -e '$d'

我想在" foo"之后打印任何东西。 (包括第一个foo)直到" bar",但仅匹配" foo",而不是" foo1"。

2 个答案:

答案 0 :(得分:2)

使用正则表达式标记^$分别表示行的开头和结尾:

sed -n '/^foo$/,/^bar$/ p' file.txt

答案 1 :(得分:0)

sed -n '/\<foo\>/,/\<bar\>/ p' file.txt

或者如果foo和bar必须是任何一行的第一个单词,可能就是这样。

sed -n '/^\<foo\>/,/^\<bar\>/ p' file