特定の単語「[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