命令提取两个变量之间的值并将其存储在变量中

命令提取两个变量之间的值并将其存储在变量中

我试图提取两个变量之间的值(数字)并将该值存储在另一个变量中。

我正在使用 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 之间的数字的方法,比如说$字符串这是:&xyz!$变量2这是:,我有 60 个即&xyz!60! 所以我需要提取60。

我也尝试过

line=`sed -nr "s/$string([0-9]+),$variable2/\1/ p" $1` 

但是当我回显 $line 时它​​打印了整个文件内容

提前致谢

答案1

这可以通过 shell 参数替换来完成:

# 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
    

相关内容