从文件中删除括号
remove enclosing brackets from a file
如何使用 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 '%s\n' '1s/^\([[:space:]]*\)\[//' '$s/\]\([[:space:]]*\)$//' w | ed -s file1
如果您想将文件的修改内容作为管道的一部分传递给其他东西,请使用 sed
:
sed -e '1s/^\([[:space:]]*\)\[//' -e '$s/\]\([[:space:]]*\)$//' file1
对于文件的第一行,这两个都将删除行首的 [
(跳过左大括号之前的任何初始空格),对于文件的最后一行文件(可以与第二个示例中的行相同),删除行尾的 ]
(不计算右括号后的任何尾随空格)。结果中将保留任何 leading/trailing 空格;也使用 s/...//
来删除它们。
perl -0777 -pe 's/^\s*\[\s*//; s/\s*\]\s*$//' file
删除外括号周围的 所有 空格是激进的,这与您在所需输出中显示的内容不完全相同。
使用 GNU sed 用于 -E
和 -z
:
$ sed -Ez 's/\[(.*)]//' file1
Lorem ipsum
[dolor] sit [amet
conse] sadip elitr
$ sed -Ez 's/\[(.*)]//' file2
Lorem ipsum [dolor] sit [amet conse] sadip elitr
以上将整个文件读入内存。
如何使用 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 '%s\n' '1s/^\([[:space:]]*\)\[//' '$s/\]\([[:space:]]*\)$//' w | ed -s file1
如果您想将文件的修改内容作为管道的一部分传递给其他东西,请使用 sed
:
sed -e '1s/^\([[:space:]]*\)\[//' -e '$s/\]\([[:space:]]*\)$//' file1
对于文件的第一行,这两个都将删除行首的 [
(跳过左大括号之前的任何初始空格),对于文件的最后一行文件(可以与第二个示例中的行相同),删除行尾的 ]
(不计算右括号后的任何尾随空格)。结果中将保留任何 leading/trailing 空格;也使用 s/...//
来删除它们。
perl -0777 -pe 's/^\s*\[\s*//; s/\s*\]\s*$//' file
删除外括号周围的 所有 空格是激进的,这与您在所需输出中显示的内容不完全相同。
使用 GNU sed 用于 -E
和 -z
:
$ sed -Ez 's/\[(.*)]//' file1
Lorem ipsum
[dolor] sit [amet
conse] sadip elitr
$ sed -Ez 's/\[(.*)]//' file2
Lorem ipsum [dolor] sit [amet conse] sadip elitr
以上将整个文件读入内存。