SedまたはAWK:行番号範囲の間にパターンが表示されるたびに行を追加します。

SedまたはAWK:行番号範囲の間にパターンが表示されるたびに行を追加します。

パターンが表示されるたびにテキスト行を追加する必要があります。私はこれが必要です:

pattern1
pattern2

こんな感じ

pattern1
pattern2
new line data here

新しい行データは常にモード2以降に表示されます。パターン2は常に同じで、パターン2は100回以上表示されます。 226行と2858行の間にモード2が表示されている場合にのみこれを実行したいと思います。私は内部修正を行い、ファイルの他の何も消去せずにこれをすべてやりたいと思います。 (既にテスト中に一度やってしまいましたが、もう一度やりたくありません)

更新 - パターンに特殊文字が含まれているため、より正確でなければなりません。だから実際にこれを変更しています。

pattern1
pattern2 { text; };

これに関して

pattern1
pattern2 { text; };
new data { text; text; text; };

したがって、特殊文字を含むパターン2が一致し、特殊文字を含む新しいデータ行が追加されます。この事実は事前に明らかにされなければなりませんでした。混乱させて申し訳ありません。

ベストアンサー1

vimでできます!

vim file.txt -c "226,2858g/pattern2/normal onew line data here" -c "wq"

次の方法で対話的にこれを実行することもできます。

vim file.txt
:226,2858g/pattern2/normal onew line data here
:wq

どちらか私はこれを好むが、vimに慣れていないので、最初のものを好む場合は理解します。

どちらもvimコマンドを呼び出して動作します:global

                        *:g* *:global* *E147* *E148*
:[range]g[lobal]/{pattern}/[cmd]
            Execute the Ex command [cmd] (default ":p") on the
            lines within [range] where {pattern} matches.

この例では、範囲は226行から2858行、パターンは「pattern2」で、exコマンドは次のようになります。

normal onew line data here

それがすることは、「私が入力するときに次のキーを入力せよ」という意味である「一般」と呼ばれることです。 「o」キー(o)を入力すると、現在の行の下に新しい行が追加され、挿入モードに入ります。その後、挿入モードでは、「New line of data here」というテキストがファイルに挿入されます。

次のコマンドは-c "wq"(w)riteと(q)uitです。

あなたの「パターン」が正規表現を使用している場合は、おそらく最後まで読む必要があります。この素晴らしいページパターンマッチングが正しいかどうか問題を解決するのに役立ちます。

おすすめ記事