2017-11-28 29 views
1

私は、Bashを使用して一度に複数のファイルに置き換えたい同じCSS変数文字列を含むCSSファイルに含まれている特定の文字列をどのように置き換えることができるかを調べようとしていますそれらのCSSファイル内の特定の文字列を置き換えるだけで、各ディレクトリ内のCSSファイルの各インスタンスを開く必要があります。複数のCSSスタイル文字列をsedに置き換える

私のCSSファイルCSSコードの特定の行をコメントアウトしたいのですが、特定の文字をエスケープしてその行をコメントアウトされた行で変換することができません。 /*outline-style: dashed;*/

outline-style: dashed;私は私がこれまで試したが、私のために働いていない何行/* */をコメントアウトするために、次のようにも:;文字をエスケープする方法を見つけ出すことはできませんが使用して次のことをしましたperlによるxargs;

find . -type f | xargs perl -e 's/outline-style dashed;/\/*outline-style dashed;*/\/g;' 

が、これは私も

find . -type f -exec sed -i 's/$^outline-style\: dotted\;/\/*outline-style\: dotted\;/g' *.{css} \; 

を試みることによって、代替品の最も簡単なのために働くように思われsedを使ってみましたが、これにはない

Backslash found where operator expected at -e line 1, near "s/outline- 
style dashed;/\/*outline-style dashed;*/\" 
syntax error at -e line 1, near "s/outline-style dashed;/\/*outline- 
style dashed;*/\" 
Search pattern not terminated at -e line 1. 
xargs: perl: exited with status 255; aborting 

を言って、エラーを返します。これはちょうどエラーを返すsed: can't read *.{css}: No such file or directory

私は試してみましたhoutはそこに*.{css}を追加しても、私には同じエラーが表示されますが、CSSファイルの出力は変更されません。

shopt -s globstar 
sed -i 's/^outline-style: dashed;$/\/*outline-style: dashed;*\//' **/*.css 

それとも、このようなあなたのfind例を編集することができます:あなたはの.cssで終わるディレクトリを持っていない場合は

答えて

1

、あなたはこれを使用することができます

find . -type f -name '*.css' -exec sed -i 's/^outline-style: dashed;$/\/*outline-style: dashed;*\//' {} + 

なお、実際に特定の文字スラッシュなど、エスケープする必要があります。

+0

hmmはCSSファイルに書き込むのではなく、エラーを出していない、つまり実行したことを意味しますが、何もしませんでした。 –

+1

@ user94959行が正確に 'outline-style:dashed;'ならば、どちらも正しく動作するはずです。 sedに含まれていないタブや何かを使用していますか? – PesaThe

+1

@ user94959データにDOSスタイルの行末文字が含まれている場合、これも失敗することに注意してください。その場合、ファイルをUnix形式に変換するか、 'sed'に' \ r'文字を追加する必要があります。 – PesaThe

関連する問題