从文件中移除方括号



如何使用bash脚本有效地从文件中移除括号(文件中首次出现[,最后一次出现](?所有嵌套在外括号内并且可能延伸超过几行的括号都应保留。可能存在前导空格或尾随空格。

file1含量

[
Lorem ipsum
[dolor] sit [amet
conse] sadip elitr
]

cat file1 | magicCommand

期望输出

Lorem ipsum
[dolor] sit [amet
conse] sadip elitr
file2

含量

[Lorem ipsum [dolor] sit [amet conse] sadip elitr]

cat file2 | magicCommand

期望输出

Lorem ipsum [dolor] sit [amet conse] sadip elitr

如果要编辑文件以删除大括号,请使用ed:

printf '%sn' '1s/^([[:space:]]*)[/1/' '$s/]([[:space:]]*)$/1/' w | ed -s file1

如果您想将修改后的文件内容作为管道的一部分传递给其他内容,请使用sed:

sed -e '1s/^([[:space:]]*)[/1/' -e '$s/]([[:space:]]*)$/1/' file1

对于文件的第一行,这两种方法都将删除该行开头的[(跳过大括号前的任何初始空白(,对于文件的最后一行(可以是与第二个示例中相同的行(,删除该行末尾的](不计算右括号后的任何尾随空白(。任何前导/尾随空格都将保留在结果中;也可以使用s/...//来移除它们。

perl -0777 -pe 's/^s*[s*//; s/s*]s*$//' file

这对于删除外括号周围的所有空白是非常激进的,这并不是您在所需输出中显示的内容。

对于-E-z使用GNU sed:

$ sed -Ez 's/[(.*)]/1/' file1
Lorem ipsum
[dolor] sit [amet
conse] sadip elitr

$ sed -Ez 's/[(.*)]/1/' file2
Lorem ipsum [dolor] sit [amet conse] sadip elitr

以上内容将把整个文件读入内存。

最新更新