Notepad++ 查找所有带左括号但没有右括号的行,并为 AWK 脚本错误添加更近的括号

Notepad++ find all lines with open parentheses but no close parentheses and add closer parentheses for AWK script error

我有几个大型日志文件,其中包含以下格式的行:

/resource/text_(moretext 

现在这些需要用“)”关闭,但文件太大无法手动执行此操作。不幸的是,行内的文本可以是任何东西。所以我想我需要一些能够找到所有有“(”但没有“)”的行的表达式。然后必须将这些行替换为完全相同的内容,但在末尾添加“)”。

所以它应该是这样的:

之前:

/resource/text_(moretext 

之后:

/resource/text_(moretext) 

我觉得这在 Notepad++ 中使用正则表达式应该是可能的,但我很难弄清楚如何做到这一点。

我需要这个,因为我正在将这些日志与 .TTL 文件进行比较,以提取可以在两个文件中找到的行。我使用以下 AWK 脚本执行此操作:

BEGIN { IGNORECASE = 1 }  # ignoring the case
       NR==FNR { a[]; next }   # hash csv to a hash
       {
           for(i in a) {          # each entry in a
               if([=13=] ~ 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/

非常感谢您的帮助:)

我相信这应该可以帮助您完成大部分工作。

查找:([^\(]*\([^\(]*)\n

替换:\)\n

在您的查找中,未转义的括号标记了一个要捕获的组(您要保留的文本),该组被替换为 </code></p> <p><code>\ 对字符进行转义,因此 \( 将在文本中选择左括号而不是在表达式中标记捕获。

方括号标记要匹配的字符集,^ 字符标记您要匹配组中不存在的任何内容。所以 [^\(] 匹配任何不是左括号的东西。该组后跟一个 *,它量化 0 个或多个匹配项。

最后 \n 标记了一个新行。根据格式,这可能不是您行尾的正确字符。您可能需要使用 \r\n 之类的东西。

我发现构建正则表达式查询的有用资源是 https://regexr.com 您可以粘贴您的文本示例并尝试一些匹配。

希望这对您有所帮助。

将 sed 与 -E 选项结合使用,您可以:

sed -E 's/\([^)]+$/[=10=])/' file

使用 Notepad++,你可以对这种差异做同样的事情,你应该在字符 class.

中包含换行符,最好使用 \r