我正在努力解决问题。
我们有一个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"/'
答案 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