正则表达式 – 用于在两个字符串之间提取文本的sed
请帮我使用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做到这一点:
(来自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’之间的第一个块,或’只有最后一个……’),那么你需要在问题中更清楚地表达出来. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |