Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix:cut或awk命令中的多字符和单字符分隔符_Unix_Awk_Sed_Cut - Fatal编程技术网

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

Unix:cut或awk命令中的多字符和单字符分隔符,unix,awk,sed,cut,Unix,Awk,Sed,Cut,这是我的字符串: my_file1.txt-myfile2.txt_my_file3.txt 我想删除第一个“.txt”后面第一个“u”后面的所有字符 从上面的示例中,我希望输出为my_file1.txt-myfile2.txt。我必须搜索第一个出现的“.txt”,并继续解析,直到找到下划线字符,然后从那里删除所有内容 是否可以在sed/awk/cut等命令中执行此操作?您不能使用cut执行此操作,但可以使用sed和awk: $ sed 's/\.txt/\n/g; s/\([^\n]*\n[

这是我的字符串:

my_file1.txt-myfile2.txt_my_file3.txt
我想删除第一个“.txt”后面第一个“u”后面的所有字符

从上面的示例中,我希望输出为
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

您不能使用
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到最后一行的所有内容,并在此处打印该行即可。请尝试以下内容,并根据显示的示例编写

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

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

如果您能解释您使用的sed命令,这将对读者非常有用。我认为这是非常常见的惯用sed-在浏览手册页后,您是否有任何部分不明白?如果您可以解释您使用的sed命令。我认为这是非常常见的惯用sed-在浏览手册页后,您是否有任何部分不明白?从您收到的一些答案中可以看出,您的示例没有充分测试您的需求。现在,各种脚本都可以从您发布的示例输入中生成预期的输出,而无需实际执行所需操作,即删除第一个“.txt”后面的第一个“\ux”后面的所有字符。通常,提供多行示例输入/输出是一个好主意,这样我们就可以根据这些示例所涵盖的全部需求充分测试潜在的解决方案。从您收到的一些答案中可以看出,您的示例没有充分测试您的需求。现在,各种脚本都可以从您发布的示例输入中生成预期的输出,而无需实际执行所需操作,即删除第一个“.txt”后面的第一个“\ux”后面的所有字符。通常,提供多行样本输入/输出是一个好主意,这样我们就可以根据这些示例所涵盖的全部需求充分测试潜在的解决方案。