使用sed保持一行的开头

时间:2015-04-23 19:58:05

标签: sed

我有一个文件,其中一些行以>开头 对于这些行,只有这些行,我想保留前11个字符。

我怎么能用sed做到这一点? 或者其他更好的东西?

谢谢!

穆里尔

1 个答案:

答案 0 :(得分:2)

让我们从这个测试文件开始:

$ cat file
line one with something or other
>1234567890abc
other line in file

仅保留以>开头的行的前11个字符,同时保留所有其他行:

$ sed -r '/^>/ s/(.{11}).*/\1/' file
line one with something or other
>1234567890
other line in file

仅保留以>开头的行的前11个字符并删除所有其他行:

$ sed -rn '/^>/ s/(.{11}).*/\1/p' file
>1234567890

以上用GNU sed测试。对于BSD sed,请将-r选项替换为-E

说明:

  • /^>/是一个条件。这意味着后面的命令仅适用于以>

  • 开头的行
  • s/(.{11}).*/\1/是替换命令。它只用前十一个字符替换整行。

  • -r启用扩展正则表达式格式,无需使用某些转义字符。

  • -n关闭自动打印功能。在-n生效的情况下,只有在我们明确要求打印行时才会打印行。在上面的第二种情况中,通过在替换命令之后添加p来完成。

其他形式:

$ sed -r 's/(>.{10}).*/\1/' file
line one with something or other
>1234567890
other line in file

并且:

$ sed -rn 's/(>.{10}).*/\1/p' file
>1234567890