0

我的文本文件中有这些行:

msg_wdraw[] = "whatever a sentence here,"
               "This is the second part of this text1 ."
msg_sp2million[] = "whatever a sentence here,"
                  "This is the second part of this text2."

我需要 msg_sp2million 和句点“。”之间的句子。并打印出来。

即(“这里随便一句”,“这是本文的第二部分2。”)

我试过这个:sed -n "/msg_sp2million/,/./p" filename.txt

但是,此sed命令还返回 msg_wdraw 的值(第一个变量)

我也尝试过awkgrep,其他sed.....但最终失败了。我该如何解决这个问题?为什么这不仅会返回 msg_sp2million 的值,还会返回 msg_wdraw 的值?

请帮忙@~@

4

3 回答 3

0

我无法将我的解决方案( qwwqwwq 解决方案的符合 POSIX 标准的衍生产品,以下称为qww)添加为评论。因此,qww 的解决方案有效,但仅适用于GNU awk某个版本(显然是 3.1.5,另请参见http://awk.freeshell.org/AwkFeatureComparison)。

提示:尝试

awk -W posix '/msg_sp2million/{ split($0,a,"="); print a[length(a)]; getline; print}' file.txt

非 GNU环境中,您 99% 肯定会收到错误消息,例如关于在标量上下文中使用数组。

以下解决方案也应该适用于 HP-UX 工作站:(当然
-W posix可以省略,但在测试阶段总是非常宝贵的)

awk -W posix '/msg_sp2million/{ amount=split($0,a,"="); print a[amount]; getline; print}' file.txt
于 2013-09-05T10:33:12.863 回答
0

也许是这样的:

awk '/msg_sp2million/{ split($0,a,"="); print a[length(a)]; getline; print}' file.txt

匹配正则表达式,打印后面的内容=,获取下一行,然后也打印出来。

回报:

 "whatever a sentence here,"
                  "This is the second part of this text2."
于 2013-07-30T04:07:30.077 回答
0

使用简单的 awk 命令:

awk -F '= *' -v RS='.' -v ORS='."\n' '$1 ~ /msg_sp2million/ {sub(/" *\n */, "\" ", $2);
         print $2}' file
"whatever a sentence here," "This is the second part of this text2."
于 2013-09-05T10:46:57.317 回答