如何使用 sed 删除带方括号的行?

How can I use sed to delete line with square brackets?

我有一个文本文件。

cat 3.txt
qqq abc cdef (1234) [5689a]
abcfde [aaaa]
ffff [321]

此文件有括号内容。

IFS=$'\n'
VAR=( $(</tmp/3.txt) )
LEN=${#VAR[@]}

for (( i = 0; i <LEN; i++ ));do
    echo ${VAR[$i]}
    sed -i -e "\#${VAR[$i]}#d" /tmp/3.txt
done

我要回显

qqq abc cdef (1234) [5689a]

然后删除这一行。 并回显第二行。然后删除第二行。 并回显第三行。然后删除第三行。 但这一行带有 []。我如何使用 sed 删除这一行?

这是另一种方法:

grep '\[' test.txt; sed "s/^.*\[\+.*$//" test.txt | grep -v '^$';

第一个 grep 查找带括号的行,第二个删除这些行,最后一个 grep 仅显示非空行(即没有括号的行)。

恕我直言,你不能只用一个 sed 但下面可能是一种方法

$ cat 38680195
qqq abc cdef (1234) [5689a]
qqq abc cdef (134) [4hgh]
line with <angle brackets>
line without brackets
line with {curly braces}
line with [square brackets]
another line without brackets
$ sed -n '/\[[^]]*\]/p' 38680195 && sed -i.backup '/\[[^]]*\]/d' 38680195
qqq abc cdef (1234) [5689a]
qqq abc cdef (134) [4hgh]
line with [square brackets]
$ cat 38680195
line with <angle brackets>
line without brackets
line with {curly braces}
another line without brackets

备注
原文件备份放在38680195.backup

$ cat 38680195.backup 
qqq abc cdef (1234) [5689a]
qqq abc cdef (134) [4hgh]
line with <angle brackets>
line without brackets
line with {curly braces}
line with [square brackets]
another line without brackets

编辑

更聪明的方法可能是

grep '\[[^]]*\]' 38680195 && sed -i.backup '/\[[^]]*\]/d' 38680195

在这种情况下,如果 none 行包含 [],则不会执行 sed 部分,因为它在逻辑上是 ANDed(参见 &&)。