Unix:cut 或 awk 命令中的多字符和单字符分隔符

问题描述

这是我的字符串:

my_file1.txt-myfile2.txt_my_file3.txt

我想删除第一个“.txt”之后的第一个“_”之后的所有字符。

从上面的示例中,我希望输出为 my_file1.txt-myfile2.txt。我必须搜索第一次出现的“.txt”并继续解析,直到找到下划线字符,然后从那里删除所有内容。

是否可以在 sed/awk/cut 等命令中执行此操作?

解决方法

你不能用 cut 做这个工作,但你可以用 sed 和 awk:

$ sed 's/\.txt/\n/g; s/\([^\n]*\n[^_]*\)_.*/\1/; s/\n/.txt/g' file
my_file1.txt-myfile2.txt

$ awk 'match($0,/\.txt[^_]*_/){print substr($0,1,RSTART+RLENGTH-2)}' file
my_file1.txt-myfile2.txt
,

能否请您尝试以下,根据您显示的样本编写。

awk '{sub(/\.txt_.*/,".txt")} 1' Input_file

简单地用 .txt 替换从 .txt_ 到最后一行的所有内容并在此处打印该行

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...