【发布时间】:2022-11-13 11:19:55
【问题描述】:
我需要提取CAKE_FROSTING(" 和", 之间的字符串。如果字符串跨越多行,则必须删除行更改处的引号和换行符。我有一个命令(感谢stackoverflow)在那个方向上做了一些事情,但不完全是。我该如何修复它(你能简要解释一下修复)吗?我正在使用 Linux bash。
sed -En ':a;N;s/.*CAKE_FROSTING\(\n?\s*?"([^,]*).*/\1/p;ba' filesToCheck/* > result.txt
filesToCheck/file.h
something
CAKE_FROSTING(
"is supreme",
"[i][agree]") something else
something more
something else
CAKE_FROSTING(
"is."kinda" neat"
"in fact",
"[i][agree]") something else
something more
result.txt 当前
is supreme"
is."kinda" neat"
所需的结果.txt
is supreme
is."kinda" neat in fact
编辑:在@D_action 的帮助下,我现在有了
sed -En ':a;N;s/.*CAKE_FROSTING\(\n?\s*?"([^,]*).*,/\1/p;ba' filesToCheck/* > result.txt
这会产生几乎正确的输出,但是输出中有不必要的引号和一个太多的换行符:
result.txt 当前
is supreme"
is."kinda" neat"
"in fact"
【问题讨论】:
-
@anubhava 我会对 sed 解决方案感兴趣,因为它是我唯一至少知道一点点的解决方案,但是如果另一种解决方案更好/更容易/更快,那么这是受欢迎的。
-
您需要添加一个逗号来表示您的匹配必须在逗号处停止。
*CAKE_FROSTING\(\n?\s*?"([^,]*).*, -
谢谢@D_action,这有帮助,我在编辑中将剩余的问题添加到帖子中。