我有 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,乙, 和C字元與z。
它不會取代ABC和z,它將替換為茲茲。
我可以刪除匹配的字元而不是將其更改為 z 嗎?
這很簡單,你只需將其替換為任何內容:
sed -i 's/[abc]//g' file.txt
這將刪除所有A,乙, 和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 的回報。