我有 8000 多个文件,我需要清理它们。我目前正在使用这个 sed 命令将某些字符替换为我想要的字符:
find . -name "*.txt" -print | xargs sed -i 's/a/z/g'
这会以递归方式将所有文件中的所有 a 更改为 z。我的问题是:
- 我可以将命令中要匹配的多个字符改为 z 吗?
- 我可以删除匹配的字符而不是将其更改为 z 吗?
提前致谢。
答案1
我可以将命令中要匹配的多个字符改为 z 吗?
是的,你可以。你可以将多个字符括在方括号中:
sed -i 's/[abc]/z/g' file.txt
这将取代所有A,b, 和C具有是.
它不会取代美国广播公司和是,它将替换为響。
我可以删除匹配的字符而不是将其更改为 z 吗?
这非常简单,你只需用空值替换它:
sed -i 's/[abc]//g' file.txt
这将删除所有A,b, 和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。