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

これにより、1つのb、 そしてc文字.
代替品ではありませんアブ、それは次のように置き換えられますzzz

一致した文字を z に変更する代わりに削除できますか?

これは非常に簡単で、何も置き換えないだけです。

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

すべて削除されます1つのb、 そしてc文字。

注: これらの例はfind& を使用した場合xargsでも機能します。

答え2

どちらも「はい」と答えられます。

1: これは、文字クラス[abcde]を使用することで実現できます。例:

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

これは、a、b、c の 3 つすべてを z に置き換えます。

2: 空の文字列に置き換えると、基本的に一致する文字がすべて削除されます。例:

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

返されるのは b だけです。

関連情報