如何用sed或awk删除特定位置至首个空格前的字符(保留空格)
解决文本中删除
_i及后续数字直到空格前的问题 我来帮你搞定这个文本处理需求!你需要删除每行里从_i开始到第一个空格前的所有字符(也就是_i加后面的数字),同时保留空格本身,这用sed或者awk都能轻松实现,给你两个可行方案:
方案1:使用sed命令
这个方案直接用正则匹配目标内容并替换为空:
sed 's/_i[0-9]*//' file.txt
原理说明:
s/...//是sed的替换语法,把匹配到的内容替换为空_i[0-9]*匹配_i后面跟任意数量的数字(不管是1位、2位还是更多)- 默认情况下sed会对每行进行一次匹配替换,正好符合你的需求
方案2:使用awk命令
如果想更精准地只处理第一个字段(避免行内其他位置可能出现的_i干扰),可以用awk:
awk '{sub(/_i[0-9]*$/, "", $1); print $0}' file.txt
原理说明:
$1表示每行的第一个字段(也就是空格前的部分)sub(/_i[0-9]*$/, "", $1)把第一个字段末尾的_i加数字替换为空($确保是字段末尾的内容)print $0输出处理后的整行
验证效果
拿你的示例文件测试,两种方案都会输出:
DN256845_c2_g1 len=56274 ACGGAGG
DN256532_c0_g2 len=23973 AATACTC
DN256979_c8_g3 len=16728 CGAAACT
完全符合你的期望!
内容的提问来源于stack exchange,提问作者adee1212
相关产品推荐
相关产品推荐

