在变量

时间:2015-05-06 14:58:58

标签: bash sed

我正在努力解决问题。

我们有一个gtk +程序调用一个调用rdesktop的bash脚本。 在一台机器中,我们发现rdesktop调用需要额外的参数...... 由于我没有写任何代码,我可以修改问题的GTK部分,我只能编辑在调用之间进行中间调用的bash脚本。

我有一个名为CMD的变量,其外观如下:

rdesktop -x m -r disk:USBDISK=/media -r disk:user=/home/user/ -r printer:HP_Officejet_Pro_8600 -a 16 -u -p -d -g 80% 192.168.0.5

我需要"实时编辑"当打印机参数存在时,该行追加=" MS Publisher Photosetter"在打印机名称之后。

到目前为止我最喜欢的是

ladb@luisdesk ~ $ input="rdesktop -x m -r disk:USBDISK=/media -r disk:user=/home/user/ -r printer:HP_Officejet_Pro_8600 -a 16 -u -p -d -g 80% 192.168.0.5"
ladb@luisdesk ~ $ echo $input | sed s/'printer:.*a /=\"MS Publisher Imagesetter\" '/ 

哪个回报我:

rdesktop -x m -r disk:USBDISK=/media -r disk:user=/home/user/ -r ="MS Publisher Imagesetter" 16 -u -p -d -g 80% 192.168.0.5

差不多这个,但我需要追加字符串,而不是替换它。

帮助?

编辑:我粘贴了不完整的例子。固定

EDIT2: 在谁回应的帮助下,我最终得到了

echo "$input" | sed 's/\(printer:\)\([^ ]*\)/\1\2="MS Publisher Imagesetter"/'

2 个答案:

答案 0 :(得分:1)

您可以使用:

sed 's/printer:[^=]\+=/\0 "MS Publisher Imagesetter"/' <<< "$input"

替换模式中的\0输出匹配本身。

答案 1 :(得分:1)

如果您希望输出看起来像: rdesktop -x m -r disk:USBDISK = / media -r disk:user = / home / user / -r printer:&#34; HP_Officejet_Pro_8600 MS Publisher Photosetter&#34; -a 16 -u -p -d -g 80%192.168.0.5

这个sed会这样做,它与打印机匹配:首先是现有的打印机名称和引用两者,如果不是,你可以调整替换 用于将引号/间距放在所需位置的变量:

input="rdesktop -x m -r disk:USBDISK=/media -r disk:user=/home/user/ -r printer:HP_Officejet_Pro_8600 -a 16 -u -p -d -g 80% 192.168.0.5"

echo "$input" | sed 's/\(printer:\)\([^ ]*\)/\1"\2 MS Publisher Imagesetter"/' 

输出:

rdesktop -x m -r disk:USBDISK=/media -r disk:user=/home/user/ -r printer:"HP_Officejet_Pro_8600 MS Publisher Imagesetter" -a 16 -u -p -d -g 80% 192.168.0.5