sed命令删除包含10个以上不以91开头的行

时间:2017-07-08 11:59:05

标签: sed

我希望sed命令删除一行中包含10个以上的数字且不以91开头

我的文件内容是这样的

919876543210
789876543210
9012345678
12345678901
9865746321

需要这样的输出。

919876543210
9012345678
9865746321

我尝试过awk' length> = 4' 1.txt | grep -v ^ 91

这将告诉我

789876543210
12345678901

2 个答案:

答案 0 :(得分:1)

你能做什么:

  • 忽略以“91”,/^91/!
  • 开头的所有行
  • 否则删除至少11个字符的任何内容 (假设你不关心数字,字母,空格之间的差异......),
    {/.........../d}

总而言之:

sed  '/^91/!{/.........../d}'

使用-E可能会更优雅。

(我的sed是GNU sed版本4.2.1)

答案 1 :(得分:1)

使用awk简单,清晰,便携,高效等等:

$ awk '/^91/ || length()<11' file
919876543210
9012345678
9865746321