使用SED/Perl删除包含数字的字符串部分

nev*_*int 4 unix linux bash perl sed

我有一个看起来像这样的数据:

AB208804_1 446 576 AB208804_1orf 0
AB208804_20 446 576 AB208804_20orf 0
Run Code Online (Sandbox Code Playgroud)

我想把它们转换成这个:

AB208804 446 576 AB208804orf 0
AB208804 446 576 AB208804orf 0
Run Code Online (Sandbox Code Playgroud)

只需删除第1列和第4列中的_\digit部分即可.

为什么这条线不起作用:

sed 's/_\d+//g'
Run Code Online (Sandbox Code Playgroud)

什么是正确的方法(单线)?

zen*_*zen 6

你需要-r开关和sed的字符类.

$ echo "AB208804_1 446 576 AB208804_1orf 0" | sed -r 's/_[0-9]+//g'
AB208804 446 576 AB208804orf 0
Run Code Online (Sandbox Code Playgroud)

或者,既然你问过; in perl:

$ echo "AB208804_1 446 576 AB208804_1orf 0" | perl -ne 's/_\d+//g; print $_'
AB208804 446 576 AB208804orf 0
Run Code Online (Sandbox Code Playgroud)

  • ITYM`perl -pe's/_\d + // g'` :) (5认同)