我正在尝试解决问题以解决问题。
我们有一个GTK 程序,该程序调用bash脚本,该脚本称为rdesktop。在机器中,我们发现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 imagesetter"。
到目前为止,最好的我是
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:)([^ ]*)/12="MS Publisher Imagesetter"/'
如果您希望输出看起来像:RDESKTOP -X M -R磁盘:USBDisk =/Media -R Disk:user =/home/home/user/-r打印机:" hp_officejet_pro_8600 ms publisher imagesetter" -a 16 -u -p -d -d -d -d -d -d -g 80%192.168.0.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
您可以使用以下方式:
sed 's/printer:[^=]+=/ "MS Publisher Imagesetter"/' <<< "$input"
替换模式中的