명령 출력에서 ​​문자열 잘라내기

명령 출력에서 ​​문자열 잘라내기

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 사용

한 가지 방법은 다음과 같습니다.

$ 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

우리가 원하는 숫자는 세 번째 필드에 있습니다. 세 번째 필드에는 문자가 포함되어 있으므로 여기에 +105.8°F추가합니다 . 0그러면 awk는 이를 우리가 원하는 숫자로 변환하게 됩니다.

관련 정보