32

可能なすべての改行を削除するには、次のように言います。

tr -d '\n' < days.txt
cat days.txt | tr -d '\n'

trしかし、テキスト ファイルの末尾/末尾にある改行だけを削除するにはどうすればよいでしょうか?

最後のものだけを指定するかどうかはわかりません。

4

6 に答える 6

31

a) 改行文字がファイルの末尾にあり、b) 文字の大きさが 1 バイトであるという事実を利用してください。次のtruncateコマンドを使用して、ファイルを 1 バイト縮小します。

# a file with the word "test" in it, with a newline at the end (5 characters total)
$ cat foo 
test

# a hex dump of foo shows the '\n' at the end (0a)
$ xxd -p foo
746573740a

# and `stat` tells us the size of the file: 5 bytes (one for each character)
$ stat -c '%s' foo
5

# so we can use `truncate` to set the file size to 4 bytes instead
$ truncate -s 4 foo

# which will remove the newline at the end
$ xxd -p foo
74657374
$ cat foo
test$ 

サイジングと計算を 1 行のコマンドにまとめることもできます。

truncate -s $(($(stat -c '%s' foo)-1)) foo
于 2013-05-03T19:02:53.273 に答える
26

最後の文字が改行であることが確実な場合は、非常に簡単です。

head -c -1 days.txt

head -c -N最後の N バイトを除くすべてを意味します

于 2013-05-05T18:03:41.900 に答える
8

このコマンドを試してください: sed '$ { /^$/ d}' days.txt

次のように読むことができます:「最後の行が空の行かどうかを確認してください。そうであれば、この行を削除してください」。私は両方のケースでテストしました。最初は最後に新しい行があるファイルで、もう 1 つは何か他のもので終わるファイルでテストしました。

于 2013-05-04T07:12:55.020 に答える