Grep用4个管道来格式化输出,更简单的方法?

时间:2014-02-12 22:18:52

标签: formatting grep cut

我认为必须有一种更简单的方法来做到这一点。

我有这样的文件(由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 个答案:

答案 0 :(得分:1)

您可以先执行grep,然后将grep -l输出传递给:

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

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

e.g。

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