.txt ファイルの IP をホストに置き換えます。

.txt ファイルの IP をホストに置き換えます。

というサブフォルダに約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を実行し、.logsedで終わるすべてのファイルを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/

関連情報