目前我有基于文本的文件,这些文件的某些部分如下:
\#:some comment
msgid ""
"CCCCC"
msgstr ""
\#: some comment
msgid ""
"CCCCC"
"DDDDD"
msgstr ""
\#:some comment
msgid ""
"CCCCC"
"DDDDD"
"EEEEE"
msgstr ""
我有一个正则表达式msgid ""(([^\n#])*(\n+))+msgstr ""
来匹配除评论之外的所有这些行。
我的最终目标是在msgid中或之后找到任何字符串,并将它们替换为msgstr
像:
\#:some comment
msgid ""
"CCCCC"
msgstr ""
"CCCCC"
\#: some comment
msgid ""
"CCCCC"
"DDDDD"
msgstr ""
"CCCCC"
"DDDDD"
\#:some comment
msgid ""
"CCCCC"
"DDDDD"
"EEEEE"
msgstr ""
"CCCCC"
"DDDDD"
"EEEEE"
因此,当在正则表达式中使用搜索和替换时,$ 1仅匹配每个组的最后一行。我希望$ 1可以匹配msgid和msgstr之间的字符串,以便在msgstr之后可以替换它。
任何建议都会有很大帮助!
答案 0 :(得分:0)
这是一个sed示威者sed -En ":a;N;$!ba;s/msgid \"\"((([^\n#])*(\n+))+)msgstr \"\"/--\1--/g;l"
。
在不了解您的环境的情况下,我选择了这个进行测试
你不需要sed,这只是为了展示我测试的内容和方式。
"
(...)+
,\1
对于给定的样本输入,它给出了输出:
\#:some comment
--
"CCCCC"
--
\#: some comment
--
"CCCCC"
"DDDDD"
--
\#:some comment
--
"CCCCC"
"DDDDD"
"EEEEE"
--
你的口味的正则表达式(我猜)
msgid ""((([^\n#])*(\n+))+)msgstr ""
让我知道您使用的语言/工具/风格并向我展示您的代码(不仅仅是正则表达式),我会根据您的需求调整答案。
你说你想匹配msgid和msgstr之间的文本。我读到要包含""
和msg * NOT以及匹配的文本。这与所需的输出不匹配
如果需要的输出比描述更重要,我也可以改变,但我需要你的代码以及你的正则表达式。