小编the*_*man的帖子

使用 awk 格式化 grep 输出。简单案例与背景案例

我正在努力解决这个问题。我有这条线:

mplayer *.* 2>/dev/null | grep Playing
Run Code Online (Sandbox Code Playgroud)

刚刚启动mplayer并且只有行匹配被打印在屏幕上。每次我更改当前播放的媒体时,这也有效。Playing filename

我想知道是否可以“格式化”grep 的输出。例如,如果输出是:

Playing Pink_Floyd-Wish_You_Were_Here.mp3  # I get this at the beginning
Playing Pearl_Jam-Once.mp3                 # I get this after I change media inside mplayer
Run Code Online (Sandbox Code Playgroud)

那么我会有类似的东西:

Mplayer: Playing Pink_Floyd-Wish_You_Were_Here.mp3
Mplayer: Playing Pearl_Jam-Once.mp3
Run Code Online (Sandbox Code Playgroud)

为此,我决定使用 awk:

mplayer *.* 2>/dev/null | grep Playing | awk '{print "Mplayer: "$1}'
Run Code Online (Sandbox Code Playgroud)

但在这种情况下,什么也没有发生;我没有输出!!!

我的问题不是为了解决mplayer的问题,而是为了更深入地了解bash中的管道。

例如,如果我使用以下内容:

echo a_song.mp3 | awk '{print "Mplayer: "$1}'
Run Code Online (Sandbox Code Playgroud)

我得到我想要的

Mplayer: a_song.mp3
Run Code Online (Sandbox Code Playgroud)

为什么第一个命令不起作用?

如果我想在后台运行多个这样的进程,我必须做什么?

pipe awk buffer

4
推荐指数
1
解决办法
5992
查看次数

标签 统计

awk ×1

buffer ×1

pipe ×1