在变量中插入匹配后的字符串



我正在尝试解决问题以解决问题。

我们有一个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"

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

相关内容

  • 没有找到相关文章

最新更新