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
これにより、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 だけです。