考虑一对关键字:start-word
和stop-word
。是否有类似于grep
或awk
的命令行Linux工具可以打印文本文件中start-word
和stop-word
之间的所有行?
例如,文本文件:
头
夸夸其谈
等等
开始的消息
消息内容行1
消息内容行2
端的消息
页脚
夸夸其谈
嗒嗒
通过将start-word
指定为'begin-message'并将stop-word
指定为'end-message',预期输出应为:
消息内容行1
消息内容第2行
编辑:开始 - 停止 - 单词可能包含不能仅以awk
正则表达式模式输入的特殊字符,例如“ ** BEGIN MESSAGE ** ”开头 - 字。
答案 0 :(得分:6)
awk '/begin-message/{ P=1; next } /end-message/ {exit} P' new.txt
答案 1 :(得分:1)
使用perl:
$ perl -00ne 'print $1 if /begin-message\n(.*)end-message/s' /tmp/file
message content line 1
message content line 2
答案 2 :(得分:1)
不包括START END
awk '/START/{f=1;next} /END/{f=0} f'
awk '/END/{f=0} f; /START/{f=1}'
包括START END
awk '/START/{f=1} /END/{f=0;print} f'
awk '/START/{f=1} f; /END/{f=0}'
awk '/START/,/END/'
答案 3 :(得分:0)
以下是gnu-sed
:
sed -n '
/begin-message/,/end-message/ {
/begin-message/b
/end-message/b
p
}' file
$ cat file
header
blah-blah
blah
begin-message
message content line 1
message content line 2
end-message
footer
blah-blah
blah
$ sed -n '
/begin-message/,/end-message/ {
/begin-message/b
/end-message/b
p
}' file
message content line 1
message content line 2