如何使用 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 部分,因为它在逻辑上是 AND
ed(参见 &&
)。
我有一个文本文件。
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 部分,因为它在逻辑上是 AND
ed(参见 &&
)。