Shell-Script
從命令輸出中剪切字元串
我想
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
使用 sed
這是一種方法:
$ sensors -Af | sed -n '2{s/°.*//; s/[^+-]*//; p; q}' +105.8
或者,在命令替換中使用相同的命令將其輸出擷取到變數中:
temp=$(sensors -Af | sed -n '2{s/°.*//; s/[^+-]*//; p; q}')
s/°.*//
刪除第一次出現的度數符號 ,°
以及它之後的所有內容。s/[^+-]*//
刪除所有內容,但不包括第一個+
or-
。使用 awk
$ sensors -Af | awk 'NR==2{print $3+0; exit;}' 105.8
我們想要的數字在第三個欄位中。因為第三個欄位包含字元,例如
+105.8°F
,我們添加0
到它。這迫使 awk 將其轉換為我們想要的:一個數字。