簡體   English   中英

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

[英]Removing the following characters after a pattern in a text file in Unix

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

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'以刪除模式之后的所有行。 但是命令中指定的文本文件在哪里?

使用awk可以將-_設置為字段分隔符( -F[-_] )並打印第一個塊( {print $1} ):

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

輸出:

Customer Details Report 
DemandResetFailureReport
ExcessiveMissingReadsReport
LipaBillingSumCheckReport
LipaUsageBillingReport

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

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

如果需要備份原始文件,請為備份文件指定后綴,例如:

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

另請參見以下有關在適當位置編輯文件的主題: sed在適當位置編輯文件

我建議使用sed -i 's/[-_].*//' file.txt 您的文本文件( file.txt )必須作為參數(我選擇了這種方式)或在標准輸入( sed 's/[-_].*//' < file.txt > file2.txt )上sed 's/[-_].*//' < file.txt > file2.txt您無法就地編輯( -i )。 確保不要使用sed … <file.txt >file.txt因為那樣會刪除file.txt內容

這可能對您有用(GNU sed):

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

另一個awk

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

這將刪除您不需要的內容並打印其余部分。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM