这可能是一个微不足道的事情:
我有一个文件(my.file
),其中包含以下行:
>h1_c1
>h1_c2
>h1_c3
>h2_c1
>h2_c2
>h2_c3
我希望将其in place
更改为:
>c1_h1
>c2_h1
>c3_h1
>c1_h2
>c2_h2
>c3_h3
我认为应该这样做:
sed -i 's/\(\>\)\(h1\)\(\_\)\(.*\)/\1 \4 \3 \2/g' my.file
sed -i 's/\(\>\)\(h2\)\(\_\)\(.*\)/\1 \4 \3 \2/g' my.file
但它似乎不起作用。我该怎么做?
答案 0 :(得分:2)
您的示例中显而易见的sed
是:
$ sed -i~ -e 's/^>\(h[0-9]\)_\(c[0-9]\)/>\2_\1/' *.foo
我对此进行了测试,它适用于您的示例文件。
答案 1 :(得分:1)
试试这个awk
awk -F">|_" '{print ">"$3"_"$2}' my.file > tmp && mv tmp my.file
awk -F">|_" '{print ">"$3"_"$2}' my.file
>c1_h1
>c2_h1
>c3_h1
>c1_h2
>c2_h2
>c3_h2
答案 2 :(得分:1)
您可以尝试此sed
,
sed 's/>\(h[1-2]\)_\(.*\)/>\2_\1/' yourfile
(OR)
sed -r 's/>(h[1-2])_(.*)/>\2_\1/' yourfile
答案 3 :(得分:1)
kent$ sed -r 's/>([^_]*)_(.*)/>\2_\1/' f
>c1_h1
>c2_h1
>c3_h1
>c1_h2
>c2_h2
>c3_h2
如果您希望它发生,请添加-i
"就地"