Unix命令替换完全匹配

时间:2017-04-26 10:23:22

标签: unix awk sed

我想在表格文件中替换完全匹配的字符串。我的文件有点像这样

I    1     10      100  
II   2     20      200  
III  3     30      300  
IX   9     100     1000  

我想把这样的文件放到

chrI    1     10      100  
chrII   2     20      200  
chrIII  3     30      300  
chrIX   9     100     1000

我已尝试 sed 命令但没有成功

sed -i -e 's/"III"/chrIII/g' -e 's/"II"/chrII/g' -e 's/"I"/chrI/g' filename

请找出错误。该文件有大内存占用可以用于相同的?

4 个答案:

答案 0 :(得分:2)

sed 方法

sed -E -i -e 's/\b(I|II|III|IX)\b/chr\1/g' input

DEMO OUTPUT:

~$ sed  -e 's/\b\(I\|II\|III\|IX\)\b/chr\1/g' input 
chrI    1     10      100  
chrII   2     20      200  
chrIII  3     30      300  
chrIX   9     100     1000 

答案 1 :(得分:1)

posix版本(无|\b

sed -e 's/^I{1,3}[[:blank:]]/chr&/' -e 's/^IX[[:blank:]]/chr&/' input > output

中的

sed -i -e 's/"III"/chrIII/g' -e 's/"II"/chrII/g' -e 's/"I"/chrI/g' filename
  • "III"搜索"III"而不是III
  • g不是故障但不是必需的(搜索字符串的第一个元素,样本中只有1个,是否更多?)
  • 请注意,搜索I如果没有分隔,也会找到II(此处^开始+ [[:blank:]]之后

答案 2 :(得分:0)

awk 方法:

awk '$1~/^[IXV]*$/{$1="chr"$1}1' OFS='\t' file > tmp && mv tmp file
修改后的

file内容:

chrI    1   10  100
chrII   2   20  200
chrIII  3   30  300
chrIX   9   100 1000

$1="chr"$1 - 在每个第一个字段前加上chr子字符串

答案 3 :(得分:0)

将“chr”放在第一列的前面。 无论哪种方式都适用于以下示例。

awk '{print "chr"$0}' file
awk '{$1="chr"$1}1' file 

chrI    1     10      100  
chrII   2     20      200  
chrIII  3     30      300  
chrIX   9     100     1000