Shell-Script

從命令輸出中剪切字元串

  • July 22, 2016

我想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 將其轉換為我們想要的:一個數字。

引用自:https://unix.stackexchange.com/questions/297195