
一部の処理後、入力ファイルは次のようになります。
ファイル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~
。