在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

這將取代所有A,, 和C字元與z
它不會取代ABCz,它將替換為茲茲

我可以刪除匹配的字元而不是將其更改為 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 的回報。

相關內容