我有一个包含这样句子的文件:
..........[xxxx][xxxx]
..........[xxxx][xxxx]
..........[xxxx][xxxx]
每句话末尾有两个[][],如何将[][]和[][]中的相应内容提取到一个新文件中,如下所示:
[xxxx][xxxx]
[xxxx][xxxx]
[xxxx][xxxx]
我尝试过终端正则表达式,但没有成功。谢谢,
答案1
grep
使用 GNU (或任何其他grep
支持该-o
选项的工具)尝试一下:
grep -o '\[[^]]*\]\[[^]]*\]$' file > new_file
输出:
[xxxx][xxxx]
[xxxx][xxxx]
[xxxx][xxxx]
答案2
如果您grep
支持-o
,并且没有其他[
就行,那么您想要第一个之后的所有内容[
:
$ grep -oP '[^]]*\K\[.*' file
[xxxx][xxxx]
[xxxx][xxxx]
[xxxx][xxxx]
如果您可以拥有其他[
您不想要的,请尝试:
$ grep -oP '.*\K\[.+?\]\[.*' file
[xxxx][xxxx]
[xxxx][xxxx]
[xxxx][xxxx]
如果你没有grep
支持-o
(我相信macOS 就可以), 您可以使用:
$ sed -E 's/.*(\[.+?\]\[.*)/\1/' file
[xxxx][xxxx]
[xxxx][xxxx]
[xxxx][xxxx]
答案3
POSIX sed:
sed 's/.*\(\[[^]]*\]\[[^]]*\]\)$/\1/' file
\[[^]]*\]
匹配[
、任意数量的非]
、另一个]
。\(\[[^]]*\]\[[^]]*\]\)$
匹配其中两个,锚定在行尾,由\(\)
第一个也是唯一的捕获组捕获。\1
仅捕获的组保留在输出中。