2014-02-12 65 views
1

我認爲必須有一個更簡單的方法來做到這一點。grep用4個管道來格式化輸出,更簡單的方法?

我有這樣的文件(由LS返回):

./my_file_0.txt 
./the_file_1.txt 
./my_file_2.txt 
./a_file_3.txt 

我目前正在使用:

grep -l "string" ./*_file_*.txt | cut -c 3- | cut -d "." -f1 | cut -d "_" -f1,3 | tr -s "_" " " 

,以獲得正確的輸出:

my 0 
the 1 
my 2 
a 3 

雖然工作,我是這樣做的難辦?這看起來很麻煩......

謝謝!

回答

1

可以先做你的grep,然後通過管道將grep -l輸出:

awk -F'[./]|_file_' '{print $3,$4}' 

sed 's#\.[^.]*$##;s#./##;s#_file_# #' 

例如

kent$ echo "./my_file_0.txt 
./the_file_1.txt 
./my_file_2.txt 
./a_file_3.txt"|awk -F'[./]|_file_' '{print $3,$4}' 
my 0 
the 1 
my 2 
a 3 

kent$ echo "./my_file_0.txt 
./the_file_1.txt 
./my_file_2.txt 
./a_file_3.txt"|sed 's#\.[^.]*$##;s#./##;s#_file_# #'   
my 0 
the 1 
my 2 
a 3 
+0

所以awk使用多個分隔符 - 句點,斜線和下劃線文件下劃線? – Ayshaya

+0

是的。 。 。 。 。 。 。 – Kent

+0

謝謝你的幫助肯特! – Ayshaya