行の最後の文字を削除したいです。
[root@ozzesh ~]#df -h | awk '{ print $5 }'
Use%
22%
1%
1%
59%
51%
63%
5%
予想される結果:
Use
22
1
1
59
51
63
5
答え1
sed 's/.$//'
最後の文字を削除します。
ただし、この特定のケースでは、次のようにすることもできます。
df -P | awk 'NR > 1 {print $5+0}'
算術式($5+0
)を使用してawk
5番目のフィールドを数値として解釈し、数値の後のすべての項目は無視されます。
GNU df
(-h
ここでは必要ではありませんが、すでにGNU拡張です)は、ディスク使用率のみを出力するように指示することもできます。
df --output=pcent | tail -n +2 | tr -cd '0-9\n'
(tailはヘッダーをスキップし、trは数字と行区切り文字を除くすべてを削除します。)
Linuxでは、以下も参照してください。
findmnt -no USE%
答え2
ここにありますsed
。とても簡単です。
$ cat file
Use%
22%
1%
1%
59%
51%
63%
5%
$ sed 's/.$//' file
Use
22
1
1
59
51
63
5
構文はですs(ubstitute)/search/replacestring/
。.
すべての文字を表し、$
行の終わりを示します。したがって、.$
最後の文字のみが削除されます。
この場合、コマンド全体は次のようになります。
df -h | awk '{ print $5}' | sed 's/.$//'
答え3
2つの解決策があります。
切る:
echo "somestring1" | rev | cut -c 2- | rev
ここでは、文字列を反転し、2番目の文字から文字列を切り取り、再び反転します。
sed:
echo "somestring1" | sed 's/.$//'
.$
ここでは、最後の文字の後のすべての文字を意味する正規表現を検索し、それをnull//
(2つのスラッシュの間)に置き換えます。
答え4
これを知っていますかhead
?tail
行単位ではなく文字単位で作業できますか?
$ printf "I don't like periods." | head -c-1
I don't like periods
(ところで、printf
ここでは、「改行」文字が行の末尾に印刷されるのを防ぐために使用されます。出力に改行文字があり、スペース以外の最後の文字と一緒にそれらを削除したい場合に使用しますhead -c-2
。)
これは基本的に「Guru」が使用するのと同じ解決策ですが、「last n things」構文がないため、cut
前後に使用するファンキーな操作はありません。rev
cut
一連の行を繰り返し、各行の最後の文字を削除するには、次のようにします。
some-command | while read line; do echo $(head -c-2 <<<"$line"); done