2017-04-11 8 views
2

大規模なシェルスクリプトには多くのシェルコマンドがあります。私はそれらの多くをコメントしたいと思います。例えばsed - 文字列内で多くの特殊文字を一緒に無視する方法

exec_cmd "mkdir -p $dockerHome/devicemapper/devicemapper" 

のために私は、このコマンドを交換することができる午前:今

sed -i -e "s/exec_cmd \"mkdir \-p \$dockerHome\/devicemapper\/devicemapper\"/\#exec_cmd \"mkdir \-p \$dockerHome\/devicemapper\/devicemapper\"/g" check 

、ファイル内でこのようなかなりの数のコマンドがあります。一度にすべての特殊文字を無視するsedコマンドを書く方法はありますか?それ以外の方法は置換される文字列のすべての特殊文字の前にバックスラッシュを置くように見えるからです。

+0

あなたは本当にファイルに上記のことがありますか?例えば'exec_cmd" mkdir'? – jm666

+0

...そうなら、 'sed'コマンド' s/exec_cmd \ "mkdir ...'が動作しないので... – jm666

+1

... 'LEFT DOUBLE QUOTATION MARK'と' 'U +202C)と 'QUOTATION MARK'を(' U + 0022')としています。 – jm666

答えて

1

救助者へのPerl。

quotemetaは、すべてのメタ文字を引用符で囲みます。

#! /usr/bin/perl -pl 
use warnings; 

BEGIN { 
    $regex = join '|', map quotemeta, split /\n/, << '__LIST__'; 
exec_cmd "mkdir -p $dockerHome/devicemapper/devicemapper" 
another command to be commented 
__LIST__ 

    $regex = qr/^($regex)$/; 
} 

s/$regex/$1 ? "# $1" : $_/e 

__LIST__の前にコメントするスクリプト行を入力してください。あなたが-iオプションを使用することができ、直接入力ファイルを編集するには

perl script.pl input-file > output-file 

として実行し、ファイルに保存します。

関連する問題