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' ?
答案 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,我们必须在索引中添加一个以使其匹配正确的条目。)