如何使用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
以上内容将把整个文件读入内存。