我已经通过了sed单线,但我的目标仍然有问题。除了第一次出现行外,我想替换所有匹配的字符串。我的确切用法是:
$ echo 'cd /Users/joeuser/bump bonding/initial trials' | sed <<MAGIC HAPPENS>
cd /Users/joeuser/bump\ bonding/initial\ trials该行将bump bonding中的空格替换为斜杠空间bump\ bonding,这样我就可以执行这一行(因为当空格没有转义时,我就无法对它进行cd处理)。
更新:我通过使用单引号和输出来解决这个问题
cd 'blah blah/thing/another space/'然后使用source执行命令。但它没有回答我的问题。不过我还是很好奇..。您将如何使用sed来修复它?
发布于 2010-01-30 01:41:48
您可以避免g和n的问题。
将它们全部替换,然后撤消第一个:
sed -e 's/ /\\ /g' -e 's/\\ / /1'下面是另一种使用t分支替换命令的方法:
sed ':a;s/\([^ ]* .*[^\\]\) \(.*\)/\1\\ \2/;ta'它的优点是在输入中保留现有的反斜杠空间序列。
发布于 2010-01-30 00:01:17
s/ /\\ /2g2指定第二个应用程序,而g指定所有其他应用程序也应该应用。(这可能只适用于GNU。根据开放组基规范,",则结果未指定。")
发布于 2010-01-30 00:14:53
使用awk
$ echo cd 'blah blah/thing/another space/' | awk '{for(i=2;i<NF;i++) $i=$i"\\"}1'
cd blah\ blah/thing/another\ space/
$ echo 'cd /Users/joeuser/bump bonding/initial trials' | awk '{for(i=2;i<NF;i++) $i=$i"\\"}1'
cd /Users/joeuser/bump\ bonding/initial\ trialshttps://stackoverflow.com/questions/2166007
复制相似问题