应用回声作为模式

应用回声作为模式

教了我如何使用以下命令删除 之间的内容<>

 echo 'i<    1|   |    1>      -1.0000000000000' | sed 's/<[^-]*//'

这给了我i-1.000000000 as正如我所要求的,但在我的文本文件中我有很多这样的行:

<    1|   |    1>       1.7320508075689
<    1|   |    1>       1.0000000000000
<    1|   |    1>       1.0000000000000
I<    1|   |    1>      -1.0000000000000
<    1|   |    1>       1.0000000000000

所以我想应用此命令作为删除<..>文件中所有内容的模式。

答案1

sed 's/<[^-]*//'实际上删除了从<到(但不包括) 的所有内容-

要真正删除从<下一个开始的所有内容>,您可以

sed 's/<[^>]*>//' 

您可能会自己弄清楚这一点,所以我想您不理解这里的正则表达式语法。[^>]匹配除 之外的任何字符>

最后,您可以sed直接对文件运行命令,只需将文件的路径作为参数提供即可。因此,要在名为 的文件上运行上述命令foo.txt,您可以执行以下操作:

sed 's/<[^>]*>//' foo.txt

并且,要使命令实际更改文件,请使用:

sed -i.bak 's/<[^>]*>//' foo.txt

原始文件将被重命名为foo.txt.bak.

相关内容