私はいくつかのシェルスクリプトをリファクタリングだ、と私はこのようなsedコマンドに走った:私は、置換が何をするかを理解しアクション
sed -i "/^$t=/ s/^$t=.*$/$str/" $fil
。私はその結果を見ることができますが、私はスペースの前にコマンドの部分が何であるのだろうかと思っています。シンプルなマッチのように見えますが、それは全く不要です。
私はいくつかのシェルスクリプトをリファクタリングだ、と私はこのようなsedコマンドに走った:私は、置換が何をするかを理解しアクション
sed -i "/^$t=/ s/^$t=.*$/$str/" $fil
。私はその結果を見ることができますが、私はスペースの前にコマンドの部分が何であるのだろうかと思っています。シンプルなマッチのように見えますが、それは全く不要です。
あなたは正しいです:sed '/pattern/ s/find/replace/'
は、/pattern/
に一致する行で置換を実行します。 3.1. How sed worksで
我々は読み:アクティブパターン・スペース、および補助ホールドスペース:sedを
は、2つのデータ・バッファを維持しています。どちらも最初は空です。
sedは、入力の各行で次のサイクルを実行することで動作します。まず、sedは入力ストリームから1行を読み込み、末尾の改行を削除してパターン空間に配置します。その後、コマンドが実行されます。各コマンドにはアドレスが関連付けられます。アドレスは一種の条件コードであり、コマンドが実行される前に条件が確認された場合にのみ実行されます。
その後、我々は、次を参照してください。
SED/regexp/
と行を選択する
3.2これは、正規表現regexpに一致するすべての行を選択します。正規表現自体に/文字が含まれている場合は、バックスラッシュ()でエスケープする必要があります。 空の正規表現「//」は、最後の正規表現の一致を繰り返します(空の正規表現がsコマンドに渡された場合も同じです)。正規表現の修飾子は、正規表現がコンパイルされたときに評価されるため、空の正規表現と一緒に指定することはできません。
そして最後にs/
式がで定義されています:コマンドがさん/正規表現/交換/旗 'です
(代替のように)3.5ザ・■コマンド
秒の構文。 /文字は、与えられたsコマンド内の他の任意の1文字で一様に置き換えられます。 /文字(またはその代わりに使用される他の文字)は、\文字が前に付いている場合にのみ、正規表現または置換文字で使用できます。
ええ、[パターンに一致する行のみ置換を実行しようとしています](https://stackoverflow.com/documentation/sed/3120/address-and-address-range/13753/lines-matching-正規表現パターン#t = 201610210202228277392) - この場合、 '/^$ t = /' ...明らかに、行がパターンにマッチしないならば、sedが置換に必要でないので、これはもっと速くなります。ファイルのサイズとこのパターンに一致する行数はどれくらいですか。 – Sundeep
OK、スペースは論理ANDとほぼ同等ですね、それは正しいのですか? – Kevin
そのスペースは全く必要ではなく、文法的な砂糖だけです。 'sed -i" /^$t=/s/^$t=.*$/$str/ "$ fil'も動作します...論理がかなり明確です。行がパターンにマッチした場合にのみ、置換を行います。別の例: 'echo 'cat and dog animal' | sed '/ animal/s/cat/CAT /' ' – Sundeep