替换两个选项卡之间的文本 - sed

时间:2016-04-22 12:43:44

标签: linux unix ubuntu awk sed

我有以下输入文件:

text1 text2 text3 text4
abc1 abc2 abc3 abc4

我试图找到两个标签之间的第二个字符串(例如text2,abc2)并用另一个单词替换它。

我试过

sed s'/\t*\t/sample/1'

但它只删除标签而不替换单词。

我感谢任何帮助!

5 个答案:

答案 0 :(得分:1)

使用此sed

sed 's/\t[^\t]*\t/\tsample\t/'

答案 1 :(得分:1)

我建议在这里使用awk:

awk 'BEGIN { FS = OFS = "\t" } { $2 = "sample" } 1' file

将输入和输出字段分隔符设置为选项卡并更改第二个字段。最后的1始终为true,因此awk执行默认操作{ print }

答案 2 :(得分:0)

gawk中的另一种选择,因为您标记了awk ---

 gawk -- 'BEGIN {FS="\t"; OFS="\t"} {$2="sample"; print}'

例如,

 echo -e 'a\tb\tc\td' | gawk -- 'BEGIN {FS="\t"; OFS="\t"} {$2="sample"; print}'

打印

a    sample  c      d

标签FS中断输入,OFS使用标签分隔输出字段,而$2="sample"仅更改第二个字段,其余字段保持不变。

答案 3 :(得分:0)

试试这个

 sed -e 's/\([a-zA-Z0-9]*\) \([a-zA-Z0-9]*\) \([a-zA-Z0-9]*\) \([a-zA-Z0-9]*\)/\1 sample \2 \3 \4/'

答案 4 :(得分:0)

在GNU sed v4.2.2中,我不得不使用-r

sed -r 's/^([^\t]*\t)[^\t]*/\1sample/'

^([^\t]*\t)是第一个字段和第一个标签,[^\t]*是第二个字段的文本。 \1恢复第一个字段,sample是您想要的任何内容:)。

例如,

echo -e 'a\tb\tc\td' | sed -r 's/^([^\t]*\t)[^\t]*/\1sample/'

打印

a       sample  c       d

这也适用于四个以外的列。例如

$ echo -e 'a\tb\tc' | sed -r 's/^([^\t]*\t)[^\t]*/\1sample/'
a       sample  c

$ echo -e 'a\tb\tc\td\te' | sed -r 's/^([^\t]*\t)[^\t]*/\1sample/'
a       sample  c       d       e