1. ホーム
  2. c

[解決済み] 改行文字とは?

2022-03-07 07:54:26

質問

これは非常に基本的な概念ですが、私はこれまでうまく表現することができませんでした。

例えば、Unix(またはWindows)で新しいファイルを作成する場合、ファイルには「改行文字」と呼ばれる特別な文字を挿入して、「行末」情報を保存するのでしょうか。もしそうなら、そのAscii値は何ですか?C言語のプログラムでは、'˶'ᴗ'˶という値に対して、読み取った文字をチェックした記憶があるのですが。また、行末を表すのになぜ2文字もあるのか...。

bash$ cat states
California
Massachusetts
Arizona

例えば、行間に1行分のスペースを挿入して、その形の出力が欲しいとします。 希望する出力

California

Massachusetts

Arizona

bash$sed -e 's/\n/\n\n/g' states  does not work.

なぜ、改行文字を他の文字と同じように扱って、上記のようなコマンドを実行できないのでしょうか?(これはsedの構文の問題だと言われるかもしれないことは理解していますが、これを許さないという直感を説明してもらえると、混乱が解消されるのですが。

同様に、vimエディター内では、:%s/sn/texn/gが使えません。なぜですか?

sedでもvimでもバックスラッシュでさらにescapeする必要があるのでしょうか?

ありがとうございます。

ジャグラーティ

解決方法は?

からの sed マンページ :

通常、sed は、入力行の終端である改行文字を含まない行をパターンスペースに周期的にコピーし、("D" 関数の後に何かが残っていない限り)そのパターンスペースを選択するアドレスを持つコマンドをすべて適用し、パターンスペースを標準出力にコピーして改行を追加し、パターンスペースを削除します。

改行がない行で操作しているので、そこにあるパターンにマッチすることはないのです。 他の方法、たとえば $ (行末)または ^ (行頭)となります。

以下は、私がうまくいった例です。

$ cat > states
California
Massachusetts
Arizona
$ sed -e 's/$/\
> /' states
California

Massachusetts

Arizona

の後にリテラルな改行文字を入力しました。 \ の中の sed の行になります。