sed は新しい行から文字を削除します

sed は新しい行から文字を削除します

一部の処理後、入力ファイルは次のようになります。

ファイル1.txt

12345|john|student
43321|jack|professor

78965|alex|lecturer

上記のファイルをさらに処理する必要があるため、行末に改行文字も必要です。現在は、次のようにすることができます。

sed 's/$/|/' file1.txt

上記のコマンドの出力は次のようになります。

12345|john|student|
43321|jack|professor|
|
78965|alex|lecturer|

見て|、再び空の行も追加されます。|次のコマンドを使用して空白行から文字を削除しようとすると、

sed 's/|//g' file1.txt

キャラクター|はどこからでも削除されました。空行のみを削除する方法は|?また、空行を維持する必要があります。

答え1

次のコマンドを使用してこれを実行できました。

sed 's/^|//' file1.txt

デフォルトでは、最初の文字のみを確認し、^その場合は|削除します。

答え2

sed '/../!d;a\ ' file

これは以下とほぼ同じことを行います。 2つ以上の文字を含まない行を削除し、残りのすべての行にスペースを追加します。

これにより、あなたの質問に似たファイルが提供されます。

printf '12345|john|student\n|\n|\n|\n%.0b' `seq 1 10` >|./file1.txt

次のようになります。

12345|john|student
|
|
|

ところでそれを10回も繰り返しました。

それからこれ:

sed -n '/[^|].*/s//&|\n/p' ./file1.txt

私にしてください:

12345|john|student|

12345|john|student|

12345|john|student|

12345|john|student|

12345|john|student|

12345|john|student|

12345|john|student|

12345|john|student|

12345|john|student|

12345|john|student|

申し訳ありません。答えを正しく書くのに時間がかかりました。携帯電話で回答を書くのをやめるべきです…

答え3

元のコンテンツから|空でない行に追加できます。

使用sed:

sed -e '/^$/!s/$/|/' file

使用perl:

perl -lpe 's/$/|/ if length' file

空行を削除するには|(2番目のバージョン):

perl -lpe 's/\|// if length == 1'

答え4

そしてsed

sed -i~ -re 's/^\|$//' file

^パイプラインの開始\|と終了を検索します$//この文字を削除してください。ファイルの内部編集を使用し-i~ てバックアップを作成しますfile~

関連情報