删除许多文件上的变量字符串

删除许多文件上的变量字符串

我有许多包含类似字符串的文件:

>33100_Pseudomonas_etcetera1
texttexttext
>33632_Pseudomonas_etcetera2
texttexttext
>36406_Pseudomonas_etcetera3
texttexttext

我需要这样的输出:

>Pseudomomas_etcetera1
texttexttext
>Pseudomomas_etcetera2
texttexttext
>Pseudomomas_etcetera3
texttexttext

很确定有一个简单的 sed 解决方案,我似乎无法弄清楚

注意:字符始终是五个数字,后跟下划线,后跟假单胞菌等。该字符串始终位于其行的开头,并且始终以“>”开头。所有文件都有一个“.sorted”扩展名。

答案1

sed可以:

sed -E 's/>([0-9]+_)(\w+)/>\2/' files

如果您的模式完全有问题:

sed -E 's/([0-9]+_)//' files
  • -E使用扩展正则表达式
  • ([0-9]+_)(\w+)定义两个字型您访问它们的区域\1\2

答案2

使用 standard sed,并假设所有文件都位于当前目录中:

mkdir fixed || exit 1   # exits if the output directory already exists
for filename in *.sorted; do
    sed '/^>[0-9]*_/s//>/' "$filename" >"fixed/$filename"
done

这将迭代与模式匹配的所有文件名*.sorted,并为每个文件名运行一个简短的sed脚本。

sed脚本将找到所有以数字开头后跟下划线的 Fasta 标头。当它找到一个时,它将仅用标题标记替换标题标记、数字和下划线>

结果将写入fixed子目录中的新文件中。

答案3

[OP 写道] 很确定有一个简单的 sed 解决方案,我似乎无法弄清楚。

那是对的。

[OP 写道] 注意:字符始终是五个数字,后跟下划线,后跟 Pseudomonas_etcetera。该字符串始终位于其行的开头,并且始终以“>”开头。所有文件都有一个“.sorted”扩展名。

您对 pbm 语句的描述非常准确,因为它可以有效地转换为sed代码。就是这样:

  • 该字符串始终位于行的开头,并且始终以 ">" 开头: regex =>/^>/
  • 字符始终为 5 个数字字符:regex =>/^>[0-9][0-9][0-9][0-9][0-9]/
  • 后跟下划线,后跟“Pseudomonas_etcetera”:regex =>/^>[0-9][0-9][0-9][0-9][0-9]_Pseudomonas_etcetera/
  • 中的替换命令的基本语法sed是:s/regex/rpl_str/,这意味着模式空间的任何部分(通常是当前行,也称为记录)与正则表达式匹配(在命令LHS的前面s///,将被替换为命令RHSs///
  • 所以你执行替换的命令是:
  • sed -e 's/^>[0-9][0-9][0-9][0-9][0-9]_Pseudomonas_etcetera/>Pseudomonas_etcetera/' inp1.sorted
  • 免责声明:未经测试。

相关内容