我有 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/