【发布时间】:2018-04-11 18:37:45
【问题描述】:
我有几个大型日志文件,其中包含以下格式的行:
/resource/text_(moretext
现在这些需要用“)”关闭,但文件太大而无法手动执行此操作。不幸的是,行内的文本可以是任何东西。所以我认为我需要一些能够找到所有具有“(”和没有“)”的行的表达式。然后必须用完全相同的内容替换这些行,但在末尾添加“)”。
所以它应该是这样的:
之前:
/resource/text_(moretext
之后:
/resource/text_(moretext)
我觉得在 Notepad++ 中使用正则表达式应该可以做到这一点,但我很难弄清楚如何做到这一点。
我需要这个,因为我将这些日志与 .TTL 文件进行比较,以提取可以在两个文件中找到的行。我使用以下 AWK 脚本执行此操作:
BEGIN { IGNORECASE = 1 } # ignoring the case
NR==FNR { a[$1]; next } # hash csv to a hash
{
for(i in a) { # each entry in a
if($0 ~ i) { # check against every record of ttl
print >> "testrunawk1.txt" # if match, output matched ttl record
next # skip to next ttl record
}
}
}
现在,当我运行 AWK 脚本时,所有这些行都出现以下错误:
Fatal: unmatched ( or \(: //resource/text_(moretext/
非常感谢您的帮助:)
【问题讨论】:
-
如果你不表现出你的努力,就会跑题。
-
我只是对其进行了一些编辑,以包含我的 AWK 脚本和我收到的错误。至于表达式示例;我只设法弄清楚 \r 来查看行尾,但我不知道如何具体查找“(”以及如何忽略行内的文本。
-
概念似乎相当简单。搜索特定字符后跟任何其他字符并附加另一个字符。
-
使用 sed(带 -E)或 notepad++:
s/(\([^)]+$)/\1)/ -
在模式部分使用正则表达式:
\([^\r\n)]+$并替换为$0)