39

tailBashシェルの下で使用して最後の空でない行を取得するにはどうすればよいですか?

たとえば、my_file.txt次のようになります。

hello
hola
bonjour
(空の行)
(空の行)

明らかに、私がそうするならば、私はtail -n 1 my_file.txt空の行を得るでしょう。私の場合、取得したいですbonjour。それ、どうやったら出来るの?

4

8 に答える 8

37

tac を使用すると、ファイル全体を読み取る必要がなくなります。

tac FILE |egrep -m 1 .
于 2010-04-14T16:13:39.590 に答える
29

Awkを使用できます:

awk '/./{line=$0} END{print line}' my_file.txt

このソリューションには、使用するツールが 1 つだけであるという利点があります。

于 2010-04-14T23:20:39.830 に答える
26

grep最初に空白行を除外するために使用するのはどうですか?

$ cat rjh
1
2
3


$ grep "." rjh | tail -1
3
于 2010-04-14T15:55:11.330 に答える
6

あれば代わりにtac使えtail -rます。

tail -r | grep -m 1 '.'
于 2013-12-26T16:07:15.017 に答える
4

空行だけでなく、空白、つまり行末のスペース/タブを省略したい場合

awk 'NF{p=$0}END{print p}' file
于 2010-04-14T23:26:50.513 に答える
2

tail -rが利用できず、 も持っていない場合はegrep、次のようにするとうまくいきます。

tac $FILE | grep -m 1 '.'

ご覧のとおり、これは前の回答の 2 つを組み合わせたものです。

于 2016-04-26T15:18:39.627 に答える
0

次のように、タブとスペースだけを含まない最後の空でない行を出力します。

tac my_file.txt | grep -m 1 '[^[:blank:]]'

2020-01-01[:blank:]までマニュアルページに記載されていなくても、Grep は POSIX 文字クラスをサポートすることに注意してください。

ファイルには他の非表示文字が含まれている可能性があるため、場合によっては使用し[:space:]た方がよい場合があります。それでもすべてのスペースがカバーされるわけではありません。こちらを参照してください。

于 2019-03-15T10:34:27.130 に答える