コマンド出力から文字列を切り取る

コマンド出力から文字列を切り取る

150.8私はこのロープを切りたいですtemp1: +150.8°F (crit = +197.6°F)。次のコマンドを使用して温度を記録するスクリプトは次のとおりですsensors

#!/bin/bash
now=$(date +"%m_%d_%Y")    # get current date
now_excel=$(date +"%D %H:%M")    # get current date & time in excel format

file_dir="/var/www/html/logs"
file="$file_dir/logging_$now.csv"    # backup name and directory

temp=$(sensors -Af | sed -n '2{p;q}')    # temp1:       +150.8°F  (crit = +197.6°F)
#temp_num="$temp" | sed 's/+\(.*\)°/\1/g'

# add line to csv
printf "$now_excel" >> "$file"
printf ", " >> "$file"
printf "$temp" >> "$file"
printf "\n" >> "$file"

find "$file_dir"/* -mtime +3 -exec rm {} \;    # remove any backup files older than 3 days

exit 0

ベストアンサー1

sedを使う

1つの方法は次のとおりです。

$ sensors -Af | sed -n '2{s/°.*//; s/[^+-]*//; p; q}'
+105.8

または、内部で同じコマンドを使用します。コマンドの置き換え出力を変数としてキャプチャします。

temp=$(sensors -Af | sed -n '2{s/°.*//; s/[^+-]*//; p; q}')

s/°.*//道路標識の最初の項目°とその後のすべての項目を削除します。最初またはまでのすべての内容を削除しますs/[^+-]*//(最初または除く)。+-

awkを使う

$ sensors -Af | awk 'NR==2{print $3+0; exit;}'
105.8

私たちが望む数字は3番目のフィールドにあります。 3番目のフィールドには文字が含まれているため、ここに+105.8°F追加します。0これにより、awkはそれを私たちが望む数字に変換します。

おすすめ記事