というサブフォルダに約14,800個のファイルが散在しています/actlogs/
。このファイルの最初の行には、次のリンクが含まれています。
http://server.com/file.pdf
「server.com」文字列を「server.com」の実際のIPアドレスに置き換える必要があります。
/actlogs/ とサブフォルダで *.log を探し、各ファイルのホストをその IP に置き換える方法はありますか?
Ubuntu Server 18.04を使用しています。
答え1
これは仕事のように聞こえますsed
。
sed 's/server\.com/192.168.0.1/' *.log
sed
入力を 1 行ずつ処理するストリームエディタです。ここではs
代替コマンドを使用していますs/regex/replacement/flags
。これが必要なものであると確信している場合は、フラグを追加してi
変更を「所定の位置に」適用することができます。*
シェルでglobを実行し、.log
sedで終わるすべてのファイルをsedへの入力として渡します。
sed 's/server\.com/192.168.0.1/' *.log
これは、各行に最初に表示されるパターンのみを置き換えることに注意してください。発生場所に関係なくすべての項目を置き換えるには、グローバルフラグを使用できます。
sed 's/server\.com/192.168.0.1/g' *.log
検索する必要があるディレクトリ階層の場合は、結果を使用してfind
実行できます。sed
find /home/www/ -type f -name '*.log' -exec \
sed 's/server\.com/192.168.0.1/g' {} +
答え2
これを行う必要があります。
find . -type f -name "*.log" -exec sed 's/server\.com/192.168.0.1/g' {} +
答え3
@ user1774469の正解に加えて、bashを使用してlogの下のすべてのサブフォルダー内のファイルの文字列を置き換えることができるようにするには、*.log
次のようにします。
1)globstar
シェルオプションを有効にする:
shopt -s globstar
2)@user1774469で正しいコマンドを実行し、次のように修正します。
sed 's/server\.com/192.168.0.1/' /actlogs/**/*.log
.log
次に、ディレクトリ内の任意の場所でその拡張子を持つすべてのファイルを一致させます/actlogs/
。