在Unix中的文本文件中删除模式后删除以下字符

时间:2014-01-06 14:40:15

标签: regex shell unix sed awk

我有一个文本文件,其中包含以下行:

Customer Details Report - A03_2014-01-04_09-00-09.txt
DemandResetFailureReport_2014-01-04_11-00-08.txt
ExcessiveMissingReadsReport_2014-01-04_09-00-11.txt
LipaBillingSumCheckReport_2014-01-04_11-00-08.txt
LipaUsageBillingReport_2014-01-04_12-55-06.txt

我想在UNIX中运行一个命令(比如sed),它将编辑文本文件的内容为:

Customer Details Report 
DemandResetFailureReport
ExcessiveMissingReadsReport
LipaBillingSumCheckReport
LipaUsageBillingReport

我遇到了一些命令,如sed '/^pattern/ d',以删除模式后的所有行。但是命令中指定的文本文件在哪里?

6 个答案:

答案 0 :(得分:2)

使用awk,您可以将-_设置为字段分隔符(-F[-_])并打印第一个块({print $1}):

$ awk -F"[-_]" '{print $1}' file
Customer Details Report 
DemandResetFailureReport
ExcessiveMissingReadsReport
LipaBillingSumCheckReport
LipaUsageBillingReport

答案 1 :(得分:2)

grep -o '^[^-_]*' 

输出:

Customer Details Report 
DemandResetFailureReport
ExcessiveMissingReadsReport
LipaBillingSumCheckReport
LipaUsageBillingReport

答案 2 :(得分:1)

我总是使用perl -pi,如下所示:

$ perl -pi -e 's/[-_].*//' file
$ cat file
Customer Details Report 
DemandResetFailureReport
ExcessiveMissingReadsReport
LipaBillingSumCheckReport
LipaUsageBillingReport

如果需要备份原件,请为备份文件指定后缀,例如:

$ perl -pi.bak -e 's/[-_].*//' file

另请参阅以下有关编辑文件的主题:sed edit file in place

答案 3 :(得分:0)

我建议使用sed -i 's/[-_].*//' file.txt。您的文本文件(file.txt)必须作为参数(我选择了这种方式)或标准输入(sed 's/[-_].*//' < file.txt > file2.txt)传递,但这样您无法就地编辑它(-i )。请务必不要将sed … <file.txt >file.txt用作that will delete your file.txt contents

答案 4 :(得分:0)

这可能适合你(GNU sed):

sed -ri 's/( -|_).*//' file

答案 5 :(得分:0)

另一个awk

awk '{sub(/[-_].*/,x)}1' file
Customer Details Report
DemandResetFailureReport
ExcessiveMissingReadsReport
LipaBillingSumCheckReport
LipaUsageBillingReport

这将删除您不想要的内容并打印其余部分。