regex - awk 提取文本第 N 次出现的方括号(包含文件文本中的换行符)

标签 regex awk

我有 0.txt 和 1.txt 文件。 0.txt文件中的内容如下所示:

[{A,B,C},{D,E,F}][{G,H,I}]
1.txt文件内容如下图:
[{A,B,C},{D,E,F}]
[{G,H,I}]
即0.txt和1.txt的区别在于1.txt文件中有一个换行符。
我想要的是能够提取 之间的所有文本'[' ']' 在您的 第 NTH 次发生 使用 awk -F'[][]' -v n=2 '{ print $(2*n) }' 1.txt > 2.txt ( Extract the text between the nth occurrence of square brackets ),这用于 中显示的文本格式1.txt 文件。
所以我对应于 n=2 的愿望是 2.txt 如下所示:{G,H,I}为此,首先,当没有换行符时,我已经能够仅针对文本格式执行此操作,如 所示。 0.txt .
我需要知道如何提取 之间的文本'[' ']' 当出现换行符时,如 所示1.txt .awk -F'[][]' -v n=2 '{ print $(2*n) }' 1.txt > 2.txt的输出已经是0.txt的所有内容(方括号除外)而不是只有{G,H,I} .即2.txt内容如下:
{A,B,C},{D,E,F}
{G,H,I}
编辑更新 01:
考虑到第三次出现,即 [{J, K, L}],对于第三个输入文件,该解决方案必须具有相同的效果,如下所示。 .所以预期的退出应该是 {J, K, L} .
[{A,B,C},{D,E,F}]
[{G,H,I}]
[{J,K,L}]
对于第 n 次出现 [{x, y, z, ..}] 的所有目的(尊重 [ ] 中没有文本的条件,并且没有空行)给出的任何解决方案都应该准确地提取到输出文件 {x, y, z, ..} .

最佳答案

how to extract the text between [ and ] with the given record number


你可以试试这个gnu-awk无论括号对之间是否存在换行符,该命令都将起作用
awk -v n=2 -v RS='\\[[^]]*]' 'RT && NR == n {print substr(RT, 2, length(RT)-2)}' file

{G,H,I}
由于我们使用的是自定义 RS[...]无论第二对 [...] 是否会打印正确的记录在第一行或第二行。

关于regex - awk 提取文本第 N 次出现的方括号(包含文件文本中的换行符),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66674312/

相关文章:

java - 去掉 lib-noir 中的尾部斜杠

java - 以下关于边界匹配器正则表达式的代码片段存在问题 (\b)

java - 多行 REGEX - 仅匹配第一行,忽略其余行

bash - 如何使用 awk 或 sed 递归查找/替换字符串?

linux - 从输出命令中提取字符串

mysql - 使用 awk 或 sed 将 mysql.log 重新格式化为简单格式

regex - 如何使用正则表达式拆分不同版本的日期模式?

regex - 正则表达式匹配行包含字符串

bash/sed,以相同的缩进级别替换文件中的行

linux - 使用从其他文件复制的增量序列和名称字段在单个文件中多次复制模板