두 변수 사이의 값을 추출하여 변수에 저장하는 명령

두 변수 사이의 값을 추출하여 변수에 저장하는 명령

두 변수 사이의 값(숫자)을 추출하여 해당 값을 다른 변수에 저장하려고 합니다.

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 명령이 실패한 것 같습니다.

  1. 입력에 쉼표가 없으므로 일치하는 항목이 없으므로 아무것도 인쇄되지 않습니다.

    $ 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'
    
  2. 쉼표를 제거하면 이제 일치 항목이 있지만 접두사와 접미사는 그대로 유지됩니다.

    $ 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
    
  3. 앞과 뒤의 텍스트도 일치합니다.

    $ 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
    

관련 정보