두 변수 사이의 값(숫자)을 추출하여 해당 값을 다른 변수에 저장하려고 합니다.
sed 명령을 사용하고 있지만 출력이 나오지 않습니다.
#!/usr/bin/env bash
variable1=`cat $1`
variable2=`echo "$variable1" | cut -c 18`
echo "$variable2"
variable3=`echo "$variable1" | cut -c 60`
echo "$variable3"
string="${variable3}xyz${variable2}"
echo $string
line=`sed -n '/'"$string"'/,/'"$variable2"'/ p' $1`
echo $line
$searchString과 $variable2 사이의 숫자를 추출하는 방법을 제안해 주세요.$string이것은:&xyz!그리고$변수2이것은:!, 나는 60개를 가지고 있습니다.&xyz! 60! 그래서 60을 추출해야 합니다.
나도 시도했다
line=`sed -nr "s/$string([0-9]+),$variable2/\1/ p" $1`
하지만 $line을 echo하면 전체 파일 내용이 인쇄됩니다.
미리 감사드립니다
답변1
이는 쉘 매개변수 대체를 통해 수행할 수 있습니다.
# setup
line='hello&xyz!60!world'
string='&xyz!'
variable2='!'
# now, remove from the beginning up to the first instance of "&xyz!"
tmp=${line#*$string}
# $tmp now holds 60!world
# remove from the end the last "!" and all following characters
result=${tmp%$variable2*}
echo $result
# => 60
쉼표로 인해 sed 명령이 실패한 것 같습니다.
입력에 쉼표가 없으므로 일치하는 항목이 없으므로 아무것도 인쇄되지 않습니다.
$ set -x $ echo "$line" | sed -nr "s/$string([0-9]+),$variable2/\1/ p" + sed -nr 's/&xyz!([0-9]+),!/\1/ p' + echo 'hello&xyz!60!world'
쉼표를 제거하면 이제 일치 항목이 있지만 접두사와 접미사는 그대로 유지됩니다.
$ echo "$line" | sed -nr "s/$string([0-9]+)$variable2/\1/ p" + sed -nr 's/&xyz!([0-9]+)!/\1/ p' + echo 'hello&xyz!60!world' hello60world
앞과 뒤의 텍스트도 일치합니다.
$ echo "$line" | sed -nr "s/.*$string([0-9]+)$variable2.*/\1/ p" + sed -nr 's/.*&xyz!([0-9]+)!.*/\1/ p' + echo 'hello&xyz!60!world' 60