在命令行中格式化grep输出

时间:2018-02-07 04:55:43

标签: linux grep formatting

我使用以下grep命令搜索多个文件中的文本。

grep -w 'mytext' *.txt

现在我的结果是,

a.txt:mytext          32.15        
b.txt:mytext          27.65        
c.txt:mytext          37.95        

就像

{filename}.{extension}:{searched-line}

但我希望这个结果如下格式化:

{filename}:{searched-line}

我只是不想扩展那些文件。我怎么能在命令行中这样做?

1 个答案:

答案 0 :(得分:1)

如评论中所述,您可以将其传递给sed命令:

$ echo -e "a.txt:mytext 32.15\nb.tar.txt:mytext 34.15" | sed 's/\.[^:]*:/:/g'
a:mytext 32.15
b:mytext 34.15


$ echo -e "a.txt:mytext 32.15\nb.tar.txt:mytext 34.15" | sed 's/\.[^.:]*:/:/g'
a:mytext 32.15
b.tar:mytext 34.15

取决于您是否要保留子扩展名。

grep -w 'mytext' *.txt | sed 's/\.[^:]*:/:/g' 

grep -w 'mytext' *.txt | sed 's/\.[^.:]*:/:/g' 

取决于您想要实现的目标。

awk你可以实现同样的目标:

$echo -e "a.txt:mytext 32.15\nb.tar.txt:mytext 34.15" | awk -F'\\.[^:]*:' 'BEGIN{OFS=":"}{print $1,$2}'
a:mytext 32.15
b:mytext 34.15

$echo -e "a.txt:mytext 32.15\nb.tar.txt:mytext 34.15" | awk -F'\\.[^.:]*:' 'BEGIN{OFS=":"}{print $1,$2}'                                      
a:mytext 32.15
b.tar:mytext 34.15