在 ubuntu 中从文件递归删除某个字符/字符

在 ubuntu 中从文件递归删除某个字符/字符

我有 8000 多个文件,我需要清理它们。我目前正在使用这个 sed 命令将某些字符替换为我想要的字符:

find . -name "*.txt" -print | xargs sed -i 's/a/z/g'

这会以递归方式将所有文件中的所有 a 更改为 z。我的问题是:

  1. 我可以将命令中要匹配的多个字符改为 z 吗?
  2. 我可以删除匹配的字符而不是将其更改为 z 吗?

提前致谢。

答案1

我可以将命令中要匹配的多个字符改为 z 吗?

是的,你可以。你可以将多个字符括在方括号中:

sed -i 's/[abc]/z/g' file.txt

这将取代所有Ab, 和C具有.
它不会取代美国广播公司,它将替换为

我可以删除匹配的字符而不是将其更改为 z 吗?

这非常简单,你只需用空值替换它:

sed -i 's/[abc]//g' file.txt

这将删除所有Ab, 和C人物。

注意:这些示例也适用于带有find& 的情况xargs

答案2

两者都可以回答是:

1:您可以使用所谓的字符类 [abcde] 来实现这一点,例如

echo abcabcabc | sed -e 's/[abc]/z/g'

将 a、b、c 三个全部替换为 z。

2:如果替换为空字符串,它基本上会删除所有匹配的字符,例如

echo abcabcabc | sed -e 's/[ac]//g'

你只会得到 b。

相关内容