sed:使用反向引用索引数组

时间:2016-05-26 00:50:02

标签: sed

test_file.txt
1X2X3X
1X3X2X
3X1X2X

sed_script.sh

    if(solarSystem.contains(addThisPlanet)) { 
     for(Planet currentPlanet : solarSystem ){
    if( currentPlanet.equals( addThisPlanet) )
{
 for(String moon: addThisPlanet.getMoons())
 { currentPlanet .addMoon(moon); } 

    break;
    }
    }else { solarSystem.add(addThisPlanet); }

输出

    export list=("zero" "one" "two" "three")
    sed 's/\(.*\)X\(.*\)X\(.*\)X/a=\1 b='"${list[\2]}"' c=\3/'  test_file.txt

' list'的索引始终设置为' 2'对于所有情况。我正在尝试使用反向引用值。

预期输出

 a=1 b=two c=3 
 a=1 b=two c=2 
 a=3 b=two c=2 

任何人都可以建议如何使用反向引用值' \ 2'索引数组' list' ?

1 个答案:

答案 0 :(得分:1)

反向引用不按您希望的方式工作。对于您的要求awk是更自然的工具:

$ awk -FX 'BEGIN{split("zero one two three", a, / /)} {printf "a=%s b=%s c=%s\n",$1,a[$2+1],$3}' test_file.txt 
a=1 b=two c=3
a=1 b=three c=2
a=3 b=one c=2

如何运作

  • -FX

    这使得awk将字母X视为字段分隔符。

  • BEGIN{split("zero one two three", a, / /)}

    这定义了数组a,类似于shell变量list

  • printf "a=%s b=%s c=%s\n",$1,a[$2+1],$3

    这将打印出所选格式的格式。

    (由于awk数组的索引原点为1,我们必须在索引中添加一个以使其匹配正确的条目。)