![应用回声作为模式](https://linux22.com/image/202387/%E5%BA%94%E7%94%A8%E5%9B%9E%E5%A3%B0%E4%BD%9C%E4%B8%BA%E6%A8%A1%E5%BC%8F.png)
你教了我如何使用以下命令删除 之间的内容<>
:
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
.