Grepとsedだけを使用して、次のすべての出現を置き換えるにはどうすればよいですか?
a.example.com
と
b.example.com
/home/user/
ディレクトリツリーの下のテキストファイル内で、サブディレクトリ内のすべてのファイル内のすべてのオカレンスも再帰的に検索および置換します。
これを試して:
find /home/user/ -type f | xargs sed -i 's/a\.example\.com/b.example.com/g'
ドットディレクトリを無視する場合
find . \( ! -regex '.*/\..*' \) -type f | xargs sed -i 's/a\.example\.com/b.example.com/g'
編集:検索式のエスケープされたドット
これを試して:
grep -rl 'SearchString' ./ | xargs sed -i 's/REPLACESTRING/WITHTHIS/g'
grep -rl
は、ディレクトリ内のSEARCHSTRING
を再帰的に検索します./
そして、sed
を使用して文字列を置き換えます。
例:
ディレクトリTOM
のJERRY
として検索文字列を使用して、名前SWATKATS
をCARTOONNETWORK
に置き換えます
grep -rl 'SWATKATS' CARTOONNETWORK/ | xargs sed -i 's/TOM/JERRY/g'
これにより、TOM
が文字列JERRY
を見つけたすべてのファイルおよびサブディレクトリで、CARTOONNETWORK
がSWATKATS
に置き換えられます。
これは非常に古い質問ですが、...
@vehomzzzの答えは、質問が明示的にfind
とxargs
のみを示している場合、grep
とsed
を使用します。
@EmployedRussianと@BrooksMosesは、それがawk
とsed
の二重だと言おうとしましたが、そうではありません-再び、質問は明示的にgrep
とsed
と言いますonly。
だからここに私の解決策があります、あなたがあなたのシェルとしてBashを使用していると仮定して:
OLDIFS=$IFS
IFS=$'\n'
for f in `grep -rl a.example.com .` # Use -irl instead of -rl for case insensitive search
do
sed -i 's/a\.example\.com/b.example.com/g' $f # Use /gi instead of /g for case insensitive search
done
IFS=$OLDIFS
Unix Shellなどの別のシェルを使用している場合はお知らせください。構文調整を見つけようとします。
PS:ワンライナー:
OLDIFS=$IFS;IFS=$'\n';for f in `grep -rl a.example.com .`;do sed -i 's/a\.example\.com/b.example.com/g' $f;done;IFS=$OLDIFS
ソース:
私にとっては次のコマンドが動作します:
find /path/to/dir -name "file.txt" | xargs sed -i 's/string_to_replace/new_string/g'
文字列にスラッシュ「path/to/dir」が含まれる場合、「/」の代わりに「@」のように、別の文字で置き換えることができます。
例えば: 's@string/to/replace@new/string@g'
このコマンドを試してください:
/home/user/ directory - find ./ -type f \
-exec sed -i -e 's/a.example.com/b.example.com/g' {} \;
それよりもずっと簡単です。
for i in `find *` ; do sed -i -- 's/search string/target string/g' $i;
完了
find i
=>は、フォルダー内およびサブフォルダー内のすべてのファイルをSEDに導入します。
sed -i
=>は、ファイル内の関連する文字列が存在する場合に置き換えます。
以下のコマンドは、名前が検索パターンに一致するすべてのファイルを再帰的に検索し、文字列を置き換えます。
find /path/to/searchdir/ -name "serachpatter" -type f | xargs sed -i 's/stringone/StrIngTwo/g'
また、再帰の深さを制限する場合は、制限も設定できます。
find /path/to/searchdir/ -name "serachpatter" -type f -maxdepth 4 -mindepth 2 | xargs sed -i 's/stringone/StrIngTwo/g'