搜索使用sed替换正则表达式变量

时间:2014-03-13 14:19:02

标签: sed

这可能是一个微不足道的事情:

我有一个文件(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

但它似乎不起作用。我该怎么做?

4 个答案:

答案 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"就地"