文字が与えられたとき、
$ cat a.txt
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam at magna sed libero accumsan ultrices. Proin varius tortor risus, at pulvinar quam auctor
vitae.
Etiam iaculis ipsum quis lacus convallis finibus. Nunc fermentum, nunc sit amet egestas congue, odio quam sollicitudin velit, quis venenatis augue
nibh sed tortor.
このコマンドを使用すると、二重空白行を削除できません。
$ tr '\n\n' '\n' < a.txt
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam at magna sed libero accumsan ultrices. Proin varius tortor risus, at pulvinar quam auctor
vitae.
Etiam iaculis ipsum quis lacus convallis finibus. Nunc fermentum, nunc sit amet egestas congue, odio quam sollicitudin velit, quis venenatis augue
nibh sed tortor.
1つの新しい行を別の文字に置き換えるのは奇妙ではありませんか?
答え1
tr
一度に1文字しか表示されないため、tr ab cd
変更内容を教えてくださいa
- >c
とb
- > d
。文字が表示される順序や欠落文字があるかどうかは問題ではありません。したがって、次のようになります。
$ echo "a b bba" | tr ab cd
c d ddc
2番目のリストが短い場合は、最後の文字を繰り返して最初のリストの長さまで拡張します。したがって、、のいずれかをtr abc d
変更したり改行を改行に変更すると何も起こりません。a
b
c
d
tr '\n\n' '\n'
$ echo "a b bcba" | tr abc d
d d dddd
つまり、再配置後にオプションで同じ文字を使用できるため、改行文字を改行文字に-s
置き換えてから、1行に1つの改行文字しか保持できません。squeeze
tr -s '\n' '\n'
$ cat test.txt
foo
bar
doo
$ cat test.txt | tr -s '\n' '\n'
foo
bar
doo
あなたの例には2つの空行があるのでサム連続改行。改行を削除して空の行を1つだけにするには(二つ改行)が段落の間に残っていると使用できないようですtr
。しかし、例えばawk
。上からtest.txt
:
$ awk '/./ { e=0 } /^$/ { e += 1 } e <= 1' < test.txt
foo
bar
doo