2017-12-17 5 views
2

sedは、%%###と一致するすべての行の先頭と末尾に\nを追加するためにどのように使用できますか?これは私が得たどのくらいです:パターンに一致するすべての行の先頭と末尾に新しい行を追加する方法はありますか?

foo.txtが、その後

foobar 
%%## Foo 
%%### Bar 
foobar 

sed 's/^%%###/\n&\n/g' foo.txtが含まれている場合は、代わり

foobar 
%%## Foo 

%%### Bar 

foobar 

ノートの

foobar 
%%## Foo 

%%### 
Bar 
foobar 

を与える:これはthis post

に関連すると思われます

更新:パターンを持つを開始する行は、実際にはケースを探しています。

答えて

1

はsedを:

sed 's/.*%%###.*/\n&\n/' file 

出力:

 
foobar 
%%## Foo 

%%### Bar 

foobar 

&:あなたを編集したい場合

にマッチしたパターンスペースのその部分を参照してください。ファイル "in place"は、sedのオプション-iを使用します。

+0

こんにちは、ありがとう。あなたは、*パターン*で始まる行にのみ一致するバージョンを持っていますか? –

+0

最初の '。*'を '^'に置き換えてください。 – Cyrus

+0

ああ、ありがとう(私の裁判は正しい)。ありがとう! –

1

sedで改行を直接追加するのは面倒です。

$ foo.txt | perl -pe 's/(.*%%###.*)/\n$1\n/' 

ここでは、パターンのどこ%%###を含む任意の行として定義されているすべてのマッチラインを、キャプチャした後、私たちは先頭と末尾の改行に囲まれ、その行に置き換えます。しかし、ここで一つの選択肢あなたが利用可能perlを持っている場合があります。 GNUで

+0

[sedソリューション](https://stackoverflow.com/a/47853333/1745001)よりもそれほど面倒なことはありませんか? –

+0

@EdMorton私はいくつかの場所でSEDから改行を生成することに警告がありました。この答えは妥当と思われた。 –

+0

唯一の注意点は、いくつかのsedsが改行として '\ n'を受け入れず、バックスラッシュに続けてリテラル改行文字を必要とするか、シェルに依存して' $ '\ n "を展開することですが、あるいは '\ n'を受け入れるsedをインストールすることができます。 –

1

これはあなたのために働くかもしれない(GNU SED):基準を満たすラインのために

sed '/%%###/!b;G;i\\' file 

、ホールドスペース(デフォルトではホールドスペースは、改行が含まれている)から、改行を追加して、空を挿入ライン。

別の方法:

sed -e '/%%###/!b;i\\' -e 'a\\' file 

この時間は挿入して空行を追加します。

N.B. iaの後ろに改行を付ける必要があります。これは別の-eの呼び出しに入れて行うことができます。

第三の方法:第一の方法と同様に

sed '/%%###/!b;G;s/.*\(.\)/\1&/' file 

、ホールド空間から改行を追加し、その後、即ちそれをコピー修正された現在の行の最後の文字。それを現在の行の前に付加します。

さらに別の方法:ホールドスペースに

sed '/%%###/{x;p;x;G}' file 

スワップ、改行を出力し、バック入れ替えや改行を追加します。

N.B.ホールドスペースが空ではないかもしれない場合、それが印刷される前に(前、xhHg又はGコマンドがそれを変更しているかもしれ)バッファは、ZAPコマンドzを使用して(p)がクリアされてもよいです。

そしてもちろん:

sed '/%%###/s/^\|$/\n/g' file 
0

あなたが一致させたいとあった場合、あなたがそれらをとして扱われたくないテキストにはrepexp文字がありませんので、個人的に私が代わりに正規表現の比較の文字列を使用したいですなど、とだけではなく、文字列自体を変更する文字列の周りに改行を出力します。

awk '{print ($1=="^%%###" ? ORS $0 ORS : $0)}' file 

上記は、すべてのUNIXボックス上のすべてのシェルで任意のawkをしていきますし、あなたが複数の空白行をしたくない場合は簡単に変更されます連続する間%%### li既存の周囲の線がすでに空白であるか、または何か他のことをする必要がある場合は、空白行を追加したくない場合があります。

関連する問題