2009-08-13 13 views
1

私は起動時に設定ファイルの中で検索して置き換えるシェルスクリプトを書こうとしています。シェルスクリプトからファイル内のテキストを検索して置き換える方法は?

私たちは代わるしようとしている文字列は次のとおりです。

include /etc/nginx/https.include; 

、我々はコメントしたバージョンに置き換えることをしたい:

#include /etc/nginx/https.include; 

我々は交換したい文字列を含むファイルis:

/etc/nginx/app-servers.include 

私はLinuxの専門家ではありません。これを行うコマンドが見つからないようです。

+0

これは本当にserverfault.com imhoより適切です。 –

+0

なぜそれがserverfaultに適しているのか分かりません。それはサーバーとは関係がないようです。これはスーパーユーザーに属します。そのように閉じる投票。 – rmeador

+0

/bin/shまたはbashまたはcshまたは他のシェルがTuring完全言語です。どうしてあなたは "Xを言語Yで達成するのですか"とは思わないのですか? StackOverflowに属していますか? – dmckee

答えて

7
perl -p -i -e 's%^(include /etc/nginx/https.include;)$%#$1%' /etc/nginx/ap-servers.include 

ラインは、;で終わる代わりに使用していない可能性がある場合:

perl -p -i -e 's%^(include /etc/nginx/https.include;.*)$%#$1%' /etc/nginx/ap-servers.include 

をあなたは、元のファイルを保存したい場合は、-i後にバックアップ拡張子を追加します。

perl -p -i.bak -e 's%^(include /etc/nginx/https.include;)$%#$1%' /etc/nginx/ap-servers.include 

今、説明する。 -pフラグは、インプレース置換を意味します。ファイルのすべての行が式に供給され、結果が置換として使用されます。 -iフラグは、バックアップファイルの拡張子を示します。これを何もせずに使用することで、バックアップの生成を防ぐことができます。 -eは、実行する式として次のパラメータを取得するようにPerlに指示します。

ここで、式はs%something%other%です。パスのスラッシュをエスケープしないようにするには、より伝統的な/の代わりに%を使用します。私は式のかっこを使用し、安全のための置換式には$1を使用します。あなたが1つを変更すると、もう1つが続きます。したがって、%#$1%は、実際には、sの第2の%であり、その後に所望の#,$1、括弧内のパターンを示す%sの順である。

HTH。ハンド。

+0

+1と、より伝統的な/より良い文字の代わりにこのケース(% –

2

sedをチェックアウト:

sed -i -r 's|^(include /etc/nginx/https.include;)$|#\1|' /etc/nginx/app-servers.include 

-i手段は、その場で置換を行うと、-rは、拡張正規表現を使用することを意味します。

0
cd pathname 
for y in `ls *`; 
do sed "s/ABCD/DCBA/g" $y > temp; mv temp $y; 
done 

このスクリプトのパス名内のすべてのファイルにDCBAに文字列ABCDを交換SHOLD

3

のsed -iさん/ fooの/バー/ gが 'これは置き換え

をCONFIG.TXTファイル内のバーでfoo(大文字と小文字を区別しない)のすべてのインスタンスconfig.txt

関連する問題