如何删除文件中的变量字符串

如何删除文件中的变量字符串

其实我正在使用

sed -e s/Perro-A//g -i *-a.log 

从许多以 *-a.log 结尾的文件中删除字符串 Perro-A。

但有时我的文件中可能没有 Perro-A;我可能有 Perro-B、Perro-C、Perro-14、Perro-X、Perro-DHFN 等字符串。

我需要更新之前的命令以删除以“Perro”开头的任何字符串。我怎样才能做到这一点?

答案1

假设您只想删除所有以“Perro”开头的字符串,您可以使用:

sed 's/Perro[^ ]*//g' *-a.log

如果您想就地编辑文件,可以使用-i带有 的选项sed,例如

sed -i sed 's/Perro[^ ]*//g' *-a.log

更新

如果你不想有多个空格,你可以使用:

sed -i sed 's/Perro[^ ]*//g' *-a.log | tr -s " "

样本数据,

rahul@rahul: cat a.log
Foo Perro-B Perro-C Bar
Perro-14 cmd  Perro-X
Perro-DHFN abc xyz
aBcD Perro-14

rahul@rahul: sed 's/Perro[^ ]*//g' a.log | tr -s " "
Foo Bar
 cmd
 abc xyz
aBcD

答案2

例如,如果您想将 Perro-* 一词删除到下一个空格,您可以使用:

sed -ie 's/Perro-.*\s//g' *-a.log

样本:

cat /tmp/foo
Prefix Perro-A Suffix
Pre Perro-B Suf

sed -ie 's/Perro-.*\s//g' /tmp/foo

cat /tmp/foo
Prefix Suffix
Pre Suf

请注意,sed 不处理非贪婪过滤。

另一种方法是用于perl该工作:

cat /tmp/foo
Prefix Perro-A c Perro-B Suffix
Perro-C Pre Suf Perro-D

perl -i -pe 's/Perro-.*?\s//g' /tmp/foo

cat /tmp/foo
Prefix c Suffix
Pre Suf

答案3

您距离自己的答案只有几个字符:

sed -i -e 's/Perro.*//g' *-a.log

(我把-i前面的内容移到前面只是为了让读者尽早明白我们正在进行就地编辑)。这将删除任何字符串包含字符串“Perro”,后跟任意(或无)数量的字符 ( .*)。

相反,如果您想删除以下字符串开始与“Perro”,那么你只需要锚定字符串^

sed -i -e 's/^Perro.*//g' *-a.log

兰伯特在这里的评论中提出了很好的澄清观点;上面的 sed 语句从该行中删除字符串,但保留(现在可能为空白)行。相反,如果您希望 sed 删除包含 Perro 的行,那么他有正确的语法:

sed -i -e '/Perro/d' *-a.log

...或者类似地,删除该行,如果开始与佩罗:

sed -i -e '/^Perro/d' *-a.log

相关内容