首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在字符串上替换了sed,但跳过了第一次出现

在字符串上替换了sed,但跳过了第一次出现
EN

Stack Overflow用户
提问于 2010-01-29 23:32:26
回答 3查看 16.3K关注 0票数 15

我已经通过了sed单线,但我的目标仍然有问题。除了第一次出现行外,我想替换所有匹配的字符串。我的确切用法是:

代码语言:javascript
复制
 $ echo 'cd /Users/joeuser/bump bonding/initial trials' | sed <<MAGIC HAPPENS>
 cd /Users/joeuser/bump\ bonding/initial\ trials

该行将bump bonding中的空格替换为斜杠空间bump\ bonding,这样我就可以执行这一行(因为当空格没有转义时,我就无法对它进行cd处理)。

更新:我通过使用单引号和输出来解决这个问题

代码语言:javascript
复制
 cd 'blah blah/thing/another space/'

然后使用source执行命令。但它没有回答我的问题。不过我还是很好奇..。您将如何使用sed来修复它?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-01-30 01:41:48

您可以避免gn的问题。

将它们全部替换,然后撤消第一个:

代码语言:javascript
复制
sed -e 's/ /\\ /g' -e 's/\\ / /1'

下面是另一种使用t分支替换命令的方法:

代码语言:javascript
复制
sed ':a;s/\([^ ]* .*[^\\]\) \(.*\)/\1\\ \2/;ta'

它的优点是在输入中保留现有的反斜杠空间序列。

票数 16
EN

Stack Overflow用户

发布于 2010-01-30 00:01:17

代码语言:javascript
复制
s/ /\\ /2g

2指定第二个应用程序,而g指定所有其他应用程序也应该应用。(这可能只适用于GNU。根据开放组基规范,",则结果未指定。")

票数 18
EN

Stack Overflow用户

发布于 2010-01-30 00:14:53

使用awk

代码语言:javascript
复制
$ 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\ trials
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2166007

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档