シェルを使用してbash
次の行を含むファイルから
first "line"
<second>line and so on
1つ以上の項目を毎回次に"line"\n<second>
変更したいと思います。other characters
first other characters line and so on
"
したがって、文字列を同じ特殊文字に置き換え、<
改行文字に置き換える必要があります。
他の答えから検索した後、sed
コマンドの右側(したがって文字列other characters
)では改行を許可できますが、左側では許可されていません。
どのような方法がありますか(よりこれ)sed
この結果を得るにはgrep
?
ベストアンサー1
まあ、私はいくつかの簡単な方法を考えることができますがgrep
(とにかく交換を行いません)またはsed
。
パール
変える各
"line"\n<second>
が表示されたら、other characters
以下を使用してください。$ perl -00pe 's/"line"\n<second>/other characters /g' file first other characters line and so on
または、複数の連続した発生を1つとして扱い、
"line"\n<second>
すべて単一の項目に置き換えるには、次のようにother characters
します。perl -00pe 's/(?:"line"\n<second>)+/other characters /g' file
例:
$ cat file first "line" <second>"line" <second>"line" <second>line and so on $ perl -00pe 's/(?:"line"\n<second>)+/other characters /g' file first other characters line and so on
これ
-00
により、Perlは「ショートモード」でファイルを読み込みます。つまり、「行」\n\n
がと定義され、\n
本質的に各段落が 1 行に処理されるという意味です。したがって、交換は改行全体で一致します。アッ
$ awk -v RS="\n\n" -v ORS="" '{ sub(/"line"\n<second>/,"other characters ", $0) print; }' file first other characters line and so on
基本的なアイデアは同じです。レコード区切り記号(
RS
)を設定して\n\n
ファイル全体を削除し、出力レコード区切り文字を空白に設定し(それ以外の場合は追加の改行が印刷されます)、この関数を使用してsub()
それを置き換えます。