回答:
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%
{print +$5}
同様に動作します
awk
機能しない多くの実装があり、+
単項演算子は無視され、文字列から数値への変換を強制しません。
で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/.$//'
sed
は冗長です:で実行できますawk
:df -h | awk '{gsub(/%/,""); print $5}'
awkでは、次のいずれかを行うことができます
awk '{sub(/%$/,"",$5); print $5}'
awk '{print substr($5, 1, length($5)-1)}'
別のアプローチ:
mapfile -t list < <(df -h)
printf '%s\n' "${list[@]%?}"
関数に変換します:
remove_last() {
local char=${1:-?}; shift
mapfile -t list < <("$@")
printf '%s\n' "${list[@]%$char}"
}
次に、次のように呼び出します。
remove_last '%' df -h
mapfile
bash4の機能です。
ここでの問題は、削除する文字を指定する必要があることです。もし最後のキャラクターが何であれそれだけにしたいのなら、'?'
またはを渡さなければなりません''
。引用符が必要です。
df -h | awk 'NR > 1{ print $5 }' | cut -d "%" -f1
cut -d '%' -f1
最初の「%」までの行のすべてを取得するための正しい答えである使用に賛成です。
sed -ie '$d' filename
here -i is to write changes
e means expression
$ means last line
d means delete
Note:Without -e option $ wont work
オプション:1行目と最後の行を削除するには、sed -ie '1d;$d'
filenameを使用します
%
サインですか?