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

使用sed搜索替换正则表达式变量,sed,Sed,这可能是一个微不足道的问题: 我有一个包含以下行的文件(my.file): >h1_c1 >h1_c2 >h1_c3 >h2_c1 >h2_c2 >h2_c3 我想把它改成: >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/\(

这可能是一个微不足道的问题:

我有一个包含以下行的文件(
my.file
):

>h1_c1
>h1_c2
>h1_c3
>h2_c1
>h2_c2
>h2_c3
我想把它改成:

>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

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

试试这个
awk

awk -F">|_" '{print ">"$3"_"$2}' my.file > tmp && mv tmp my.file

试试这个
awk

awk -F">|_" '{print ">"$3"_"$2}' my.file > tmp && mv tmp my.file

您可以尝试此
sed

sed 's/>\(h[1-2]\)_\(.*\)/>\2_\1/' yourfile
(或)


您可以尝试此
sed

sed 's/>\(h[1-2]\)_\(.*\)/>\2_\1/' yourfile
(或)

如果希望它“就地”发生,您可以添加
-i


如果您希望它“就地”发生,您可以添加
-i

对于您的示例,显而易见的
sed
是:

$ sed -i~ -e 's/^>\(h[0-9]\)_\(c[0-9]\)/>\2_\1/' *.foo

我对此进行了测试,它适用于您的示例文件。

对于您的示例来说,最明显的
sed
是:

$ sed -i~ -e 's/^>\(h[0-9]\)_\(c[0-9]\)/>\2_\1/' *.foo

我对此进行了测试,它适用于您的示例文件。

请确认输出的最后一行应该是
c3_h2
not
h3
请确认输出的最后一行应该是
c3_h2
not
h3