请帮我使用sed.
我有一个像下面这样的文件.
我有一个像下面这样的文件.
START=A xxxxx xxxxx END START=A xxxxx xxxxx END START=A xxxxx xxxxx END START=B xxxxx xxxxx END START=A xxxxx xxxxx END START=C xxxxx xxxxx END START=A xxxxx xxxxx END START=D xxxxx xxxxx END
我想在START = A,END之间得到文本.
我使用了以下查询.
sed '/^START=A/,/ ^END/!d' input_file
这里的问题是,
我正进入(状态
START=A xxxxx xxxxx END START=D xxxxx xxxxx END
代替
START=A xxxxx xxxxx END
Sed贪婪地发现.
请帮我解决这个问题.
提前致谢.
我可以使用AWK实现上述目标吗?
sed -n '/^START=A$/,/^END$/p' data
-n选项表示默认不打印;然后脚本说’在包含START = A和下一个END的行之间打印.
你也可以用awk做到这一点:
A pattern may consist of two patterns separated by a comma; in this case,the action is performed for
all lines from an occurrence of the first pattern though an occurrence of the second.
(来自Mac OS X上的man awk).
awk '/^START=A$/,/^END$/ { print }' data
START=A xxx01 xxx02 END START=A xxx03 xxx04 END START=A xxx05 xxx06 END START=B xxx07 xxx08 END START=A xxx09 xxx10 END START=C xxx11 xxx12 END START=A xxx13 xxx14 END START=D xxx15 xxx16 END
使用GNU sed或Mac OS X(BSD)sed,使用GNU awk或BSD awk的输出是相同的:
START=A xxx01 xxx02 END START=A xxx03 xxx04 END START=A xxx05 xxx06 END START=A xxx09 xxx10 END START=A xxx13 xxx14 END
请注意我是如何修改数据文件的,以便更容易看到打印的各种数据块来自文件.
如果你有不同的输出要求(例如’只有START = A和END’之间的第一个块,或’只有最后一个……’),那么你需要在问题中更清楚地表达出来.