有条件地删除少于 4 个字符的行

有条件地删除少于 4 个字符的行

我想修剪少于 4 个字符的行,除非该行以#或开头!

输入示例:

aa
bbb
 
   
dasasdsad
! f
#
!
# s
a
&B@*!

输出:

dasasdsad
! f
#
!
# s
&B@*!

答案1

grep

< file.in grep -E '^[#!]|.{4}' > file.out

也就是说,选择以#或开头的行,!或者包含 4 个字符的序列。

或者与awk

< file.in awk '/^[#!]/ || length >= 4' > file.out

或者与sed

< file.in sed -e '/^[#!]/b' -e '/.\{4\}/!d' > file.out

答案2

您可以尝试这样的事情,代码未经测试:

while read line;
do
var=$(echo $line | awk '{ print length }')
if [ $var -le 4 ]; then
echo $line >> tmp.file
fi
done < your.file

这是 2 个步骤,在读取时,它将少于 4 个字符的行写入 tmp.file。比较comm -23 your.file tmp.file两个文件,抑制公共线,这> you.new.file是最终保存的版本

相关内容