问题描述
这是我的字符串:
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_ 到最后一行的所有内容并在此处打印该行