tail
Bashシェルの下で使用して最後の空でない行を取得するにはどうすればよいですか?
たとえば、my_file.txt
次のようになります。
hello
hola
bonjour
(空の行)
(空の行)
明らかに、私がそうするならば、私はtail -n 1 my_file.txt
空の行を得るでしょう。私の場合、取得したいですbonjour
。それ、どうやったら出来るの?
tac を使用すると、ファイル全体を読み取る必要がなくなります。
tac FILE |egrep -m 1 .
Awkを使用できます:
awk '/./{line=$0} END{print line}' my_file.txt
このソリューションには、使用するツールが 1 つだけであるという利点があります。
grep
最初に空白行を除外するために使用するのはどうですか?
$ cat rjh
1
2
3
$ grep "." rjh | tail -1
3
あれば代わりにtac
使えtail -r
ます。
tail -r | grep -m 1 '.'
空行だけでなく、空白、つまり行末のスペース/タブを省略したい場合
awk 'NF{p=$0}END{print p}' file
tail -r
が利用できず、 も持っていない場合はegrep
、次のようにするとうまくいきます。
tac $FILE | grep -m 1 '.'
ご覧のとおり、これは前の回答の 2 つを組み合わせたものです。
次のように、タブとスペースだけを含まない最後の空でない行を出力します。
tac my_file.txt | grep -m 1 '[^[:blank:]]'
2020-01-01[:blank:]
までマニュアルページに記載されていなくても、Grep は POSIX 文字クラスをサポートすることに注意してください。
ファイルには他の非表示文字が含まれている可能性があるため、場合によっては使用し[:space:]
た方がよい場合があります。それでもすべてのスペースがカバーされるわけではありません。こちらを参照してください。