更改字符串在行中的位置

更改字符串在行中的位置

我想将第一个字符串>和第一个字符串之间的第一个字符串移动_到第一个字符串之后的第二个位置_

这是为了改变这个:

>10E13JB10_Vacares_8__a1
blablabla
>10E13JB10_Vacares_8__a2
blablabla
>10E2JB10_Mulhacen_13__a1
blablabla

进入这个:

>Vacares_10E13JB10_8__a1
blablabla
>Vacares_10E13JB10_8__a2
blablabla
>Mulhacen_10E2JB10_13__a1
blablabla

答案1

sed -e 's/^>\([^_]*\)_\([^_]*\)/>\2_\1/' -i file

找到以 结尾的前两个字符串_,并在替换中反转它们的顺序。由于它只匹配前两个字符串,因此它不会修改或丢弃该行的其余部分。

  • s/aaa/bbb/- 执行替换,将所有出现的 替换aaabbb
  • ^- 行首
  • \(...\)-捕获组,将匹配的字符串保存为\1and\2
  • [^_]*- A字符类匹配除以下字符外的所有字符_

相关内容