いくつかの処理の後、私は以下のような入力ファイルを持っています。
file1.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
|
文字はどこでも削除されています。空白行の|
のみを削除するにはどうすればよいですか?空白行も保持する必要があります。
オリジナルから、空白でない行に|
を追加できます。
sed
の使用:
sed -e '/^$/!s/$/|/' file
Perl
の使用:
Perl -lpe 's/$/|/ if length' file
空白の行から|
を削除する場合(2番目のバージョン):
Perl -lpe 's/\|// if length == 1'
以下のコマンドで実行できました。
sed 's/^|//' file1.txt
基本的には、^
を使用して最初の文字のみをチェックし、それが|
の場合は、削除します。
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|
申し訳ありませんが、正しく実行するのに少し時間がかかりました。私は自分の電話でこれらの答えを書くのをやめる必要があります...
|を追加するだけです少なくとも1文字の行に:
sed 's/\(.\)$/\1|/' file1.txt
sed
の場合:
sed -i~ -re 's/^\|$//' file
^
行末パイプ\|
および行末$
を検索します。 //
は文字を削除します。 -i~
を使用してファイルを編集し、バックアップfile~
を作成します。
問題のコマンドから始めて、オプションg
(再帰的)を削除し、パイプの前にハット文字^
を追加して、最初の文字のみをチェックできます。
sed 's/^|//' file1.txt