我有点被替换问题困住了。我有一个选项卡分隔的文件,该文件如下所示:
stuff1 \t names names names
stuff2 \t \t names names names
stuff3 \t \t names names names
stuff4 \t names names names我想做的是用一种方式替换双标签,在它们之间插入第一个单词。如下所示:
stuff2 \t stuff2 \t names names names
stuff3 \t stuff3 \t names names names我试过的是
sed 's/\t\t/\t(.*\t\t\)\t/'但是当我试图用逃逸组代替它的时候,它从字面上看,并且改变了每一次发生的情况。
\t\t 至
\t(.*\t\t\)\t有办法“逃出逃逸小组”吗?
发布于 2016-08-17 11:40:10
就像这样配上它们:
$ 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,允许您捕获一个只使用(...)而不是\(...\)的组。顺便说一句,对我来说,您的命令的输出是:
$ 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因为您在替换部分中使用了.*,所以它是字面上的,而不是正则表达式。
https://stackoverflow.com/questions/38995549
复制相似问题