
多くのサブフォルダのさまざまなファイルには、大きなテキストファイルに次のテキストがあり、各テキストは一意です。
Linux.Secret = 'XYZZYXZYXZYXZYXZYXZ'
Linux.Secret = ''
全部同じだったらいいなLinux.Secret = 'NEWSECRET'
どうすればいいですか?
答え1
Linux.Secret =
まず、行の先頭で次の内容を含むすべてのファイルを探します。
find . -type f -exec grep -q '^Linux.Secret =' {} ';'
何も出力されず、grep -q
式が一致できるかどうかによって状態が終了します。
次に、これらのテストに合格したすべてのファイル(通常のファイルであり、そのテキストを含む)に対して単純な(GNU)sed
コマンドを実行します。
find . -type f -exec grep -q '^Linux.Secret =' {} ';' \
-exec sed -i "s/^Linux.Secret =.*/Linux.Secret = 'NewSecret'/" {} +
行全体を目的の行に置き換えると、ファイル内で変更できます。一重引用符が必要な式の周囲に二重引用符を使用して一重引用符を処理します。
一致にさらに注意を払う必要があり、Linux.Secrets =
後ろに一重引用符が続くもののみを一致させる必要がある場合:
find . -type f -exec grep -E -q "^Linux.Secret = '[^']+'" {} ';' \
-exec sed -E -i "s/^Linux.Secret = '[^']+'.*/Linux.Secret = 'NEWSECRET'/" {} +
関連: