我有以下输入文件:
text1 text2 text3 text4
abc1 abc2 abc3 abc4
我试图找到两个标签之间的第二个字符串(例如text2,abc2)并用另一个单词替换它。
我试过
sed s'/\t*\t/sample/1'
但它只删除标签而不替换单词。
我感谢任何帮助!
答案 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