我有一个文件,其中一些行以>开头 对于这些行,只有这些行,我想保留前11个字符。
我怎么能用sed做到这一点? 或者其他更好的东西?
谢谢!
穆里尔
答案 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