我有一个文本文件,其中包含以下行:
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'
,以删除模式后的所有行。但是命令中指定的文本文件在哪里?
答案 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
这将删除您不想要的内容并打印其余部分。