2つの変数の間の値(数値)を抽出して、その値を別の変数に保存しようとしています。
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