コマンドコードが正しくありません。 - sedを使用したインライン文字の交換

コマンドコードが正しくありません。 - sedを使用したインライン文字の交換

私はbash / shellスクリプトを使用するのに非常に慣れていないので、これが本当に簡単な場合は許してください。ディレクトリに入れ子になったインラインファイルを置き換えようとすると、次のメッセージが表示されます。

Invalid command code .

私が試したとき

sed -i 's/\([^.]*\).css/\1.min.css/g' ./bobby/templates/layout.html;

エラーが発生しているという大きな直感がありますが、./bobby/templates/layout.html有効なファイルパスに再フォーマットする方法がわかりません。

答え1

sedあなたのバージョンには、そのオプションのサフィックス引数が必要なようです-i。これはおそらく、MacやFreeBSDシステムにいる可能性が高いという意味です。

sedその後、sedスクリプトは接尾辞として解釈され、ファイル名はsedスクリプトとして解釈されます。したがって、Invalid command code .ファイル名の最初の文字であるため、エラー メッセージが表示されます。

努力する:

sed -i .bak 's/\([^.]*\)\.css/\1.min.css/g' ./bobby/templates/layout.html

エスケープのためにバックスラッシュを追加しました.(それ以外の場合は一致します)。どのリテラルだけでなく、文字.)を削除し、;ファイル名の末尾からを削除しました。同じ行に複数のコマンドがある場合にのみ必要です。

sed スクリプトはファイルをその場で編集し、バックアップを作成します。.../layout.html.bak

または、Perlを使用してこれを行うこともできます。例えば

perl -i -p -e 's/([^.]*)\.css/$1.min.css/g' ./bobby/templates/layout.html

ちなみに、sed バージョンと Perl バージョンで使用される正規表現は、予想より多様である可能性があります。ファイルにfilename.css1行しかない可能性はほとんどありません.html。まず、オプションなしでテストします-i

s:(/[^.]*)\.css:$1.min.css:gスラッシュ文字の直前に来る場合にのみファイル名を変更するのと同様のものが必要です。実際の入力ファイルがどのように見えるかを見ない限り、これより具体的に説明することはできません。

関連情報