1

ファイルを再フォーマットしていますが、次の手順を実行したいと考えています。

  1. 二重の CRLF を一時的な文字シーケンス ($CRLF$または何か)に置き換えます。
  2. ファイル全体からすべての CRLF を削除します
  3. 戻って、二重の CRLF を置き換えます。

したがって、次のように入力します。

This is a paragraph
of text that has
been manually fitted
into a certain colum
width.

This is another
paragraph of text
that is the same.

となります

This is a paragraph of text that has been manually fitted into a certain colum width.

This is another paragraph of text that is the same.

これは、いくつかの単純なプログラムを介して入力をパイプすることで可能になるはずですが、 inを参照する( in を使用する)sed方法がわかりません。それとも、これを行うより良い方法がありますか?CRLFsedsed 's/<CRLF><CRLF>/$CRLF$/'

4

5 に答える 5

1

sed を使用して、最後に {CRLF} ですべての行を装飾できます。

sed 's/$/<CRLF>/'

次に、tr ですべての \r\n を削除します

| tr -d "\r\n"

次に、二重の CRLF を \n に置き換えます

| sed 's/<CRLF><CRLF>/\n/g'

残りの CRLF を削除します。

これらすべてを 1 サイクルで実行するワンライナー sed がありましたが、今は見つけられないようです。

于 2012-07-09T11:08:01.710 に答える
0

これが簡単ではない理由を見逃していますか?

CRLF を追加します。

sed -es/\s+$/$'\r\n'/ < index.html > index_CRLF.html

CRLF を削除する ... UNIX に移動:

sed -es/\s+$/$'\n'/ < index_CRLF.html > index.html

于 2016-05-27T15:19:10.957 に答える
0

以下を試してください:

cat file.txt | sed 's/$/ /;s/^ *$/CRLF/' | tr -d '\r\n' | sed 's/CRLF/\r\n'/

それはあなたが与えた方法ではありません。これが何をするかは以下です:

  1. 各行の終わりにスペースを追加します。
  2. 空白のみを含む行 (つまり空白行) を "CRLF" に置き換えます。
  3. 改行文字 (CR と LF の両方) を削除します。
  4. 文字列「CRLF」の出現箇所を Windows スタイルの改行に置き換えます。

これは Cygwin bash で動作します。

于 2012-07-09T11:17:53.930 に答える
0

問題を再定義する

あなたが本当にやろうとしているのは、段落をリフローし、行をシングルスペースにすることです。これを行う方法はいくつかあります。

Sed 以外のソリューション

coreutils の外でいくつかのパッケージを使用することを気にしない場合は、いくつかの追加のシェル ユーティリティを使用して、これを次のように簡単にすることができます。

dos2unix /tmp/foo
fmt -w0 /tmp/foo | cat --squeeze-blank | sponge /tmp/foo
unix2dos /tmp/foo

Sponge はmoreutilsパッケージに含まれており、読んでいるのと同じファイルを書き込むことができます。dos2unix (またはtofrodos ) パッケージを使用すると、Unix スタイルの行末を想定するツールとの統合を容易にするために、行末を前後に変換できます。

于 2012-07-09T11:31:54.273 に答える
0

これはうまくいくかもしれません(GNU sed):

sed ':a;$!{N;/\n$/{p;d};s/\r\?\n/ /;ba}' file
于 2012-07-09T15:51:16.753 に答える