首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用一行第一个字符替换Sed

用一行第一个字符替换Sed
EN

Stack Overflow用户
提问于 2016-08-17 11:36:28
回答 1查看 1.7K关注 0票数 1

我有点被替换问题困住了。我有一个选项卡分隔的文件,该文件如下所示:

代码语言:javascript
复制
stuff1 \t names names names
stuff2 \t \t names names names
stuff3 \t \t names names names
stuff4 \t names names names

我想做的是用一种方式替换双标签,在它们之间插入第一个单词。如下所示:

代码语言:javascript
复制
stuff2 \t stuff2 \t names names names
stuff3 \t stuff3 \t names names names

我试过的是

代码语言:javascript
复制
sed 's/\t\t/\t(.*\t\t\)\t/'

但是当我试图用逃逸组代替它的时候,它从字面上看,并且改变了每一次发生的情况。

代码语言:javascript
复制
\t\t 

代码语言:javascript
复制
\t(.*\t\t\)\t

有办法“逃出逃逸小组”吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-17 11:40:10

就像这样配上它们:

代码语言:javascript
复制
$ sed -r 's/^(\S+)\t\t/\1\t\1\t/g' file
stuff1  names names names
stuff2  stuff2  names names names
stuff3  stuff3  names names names
stuff4  names names names

这是:

  • s/find/replacement/g 查找find并将其替换为replacement g的完整表达式。
  • ^(\S+)\t\t 匹配行的开头,后面跟着一个单词(您也可以说[^\t]*)。然后,匹配两个标签。
  • \1\t\1\t 将其替换为捕获的匹配,后面跟着一个选项卡,然后再进行一次。
  • -r 这个sed标志用于扩展regexp,允许您捕获一个只使用(...)而不是\(...\)的组。

顺便说一句,对我来说,您的命令的输出是:

代码语言:javascript
复制
$ sed 's/\t\t/\t(.*\t\t\)\t/' file
stuff1  names names names
stuff2  (.*     )   names names names
stuff3  (.*     )   names names names
stuff4  names names names

因为您在替换部分中使用了.*,所以它是字面上的,而不是正则表达式。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38995549

复制
相关文章

相似问题

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