改行文字で終わるパターンを改行文字のない同じパターンに置き換えます。

改行文字で終わるパターンを改行文字のない同じパターンに置き換えます。

特定の単語「[FACT]」の後に2つの新しい行を持つJavaScriptファイルがあり、それを新しい行に置き換えたいと思います。 bashスクリプトでこれを行う必要があります。一般的に私は使用しますが、これは入力で改行を処理するのに適していないことsedがわかりました。sed(私が間違っている場合は訂正してください)。

プログラムでこれを行うには、シェルスクリプトやjavascript / Javaなどを使用できますが、ソフトウェアエンジニアリング(メンテナンス性、移植性など)の観点からすると、これは良いソリューションです。

sed 's/\[FACT\]\/n/\[FACT\]/g' file.js

答え1

移植性?テキスト処理?もちろんパール:

perl -n0777e 's{\n+}{\n}g' your_file

ここでは-0777、Perlが連続した新しい行を見つけることができるように、ファイル全体を一度に読み取るように指示します。

上記は重複した改行文字をすべて削除します。次のコンテンツのみを削除するには[FACT]

perl -n0777e 's{\[FACT\]\n+}{\n}g' your_file

答え2

私は、「2つの新しい行」がその行の\n\n後に2つの空行[FACT](3つの改行)ではないことを意味すると仮定します。いずれにしても、sedはそれ以降の最初の改行文字のみを削除するために機能します[FACT]

$ echo -e '[FACT]\n\nend'
[FACT]

end

[FACT]これは、一致するすべての行で終わる行を検索し、Nそれを使用して現在のパターンスペースに次の行を追加し、sedが通常パターンスペースから削除する改行を維持します。

$ echo -e '[FACT]\n\nend' |sed '/\[FACT\]$/ { N; s/\n// }'
[FACT]
end

[FACT]行末で特に必要ない場合は、$コマンドから削除してください。

これは、含む行の末尾から改行文字を技術的に削除するため、技術的に[FACT]2行を1つに連結します。

$ echo -e '[FACT]\nhelp\nend' 
[FACT]
help
end

$ echo -e '[FACT]\nhelp\nend' |sed '/\[FACT\]$/ { N; s/\n// }'
[FACT]help
end

関連情報