我试图摆脱“的CMU-遥控-Q”运行 它总是此行巴什 - 之后的grep只有线路
tag genre Various
<some track>
现在的下方当前曲目,我需要保持简单因为我想将它添加到我的i3栏。
我用
cmus-remote -Q | grep -A 1 "tag genre"
但grep的是 '标签' 线和下面的线。
我只想要下面的线。
我试图摆脱“的CMU-遥控-Q”运行 它总是此行巴什 - 之后的grep只有线路
tag genre Various
<some track>
现在的下方当前曲目,我需要保持简单因为我想将它添加到我的i3栏。
我用
cmus-remote -Q | grep -A 1 "tag genre"
但grep的是 '标签' 线和下面的线。
我只想要下面的线。
的行数如果你想使用grep
作为这个工具,你可以通过添加另一个段您的管道实现它:
cmus-remote -Q | grep -A 1 "tag genre" | grep -v "tag genre"
这将在情况下,你要搜索的字符串是两行失败我一排。在这种情况下,如果我们要编写一些合理的代码,就必须定义你想要的行为。
另一种可能是使用像awk
一个工具,它允许更大的compexity在线路选择:
cmus-remote -Q | awk '/tag genre/ { getline; print }'
此搜索字符串,然后获取下一行,然后打印。
另一种可能性是独自做到这在bash:
while read line; do
[[ $line =~ tag\ genre ]] && read line && echo "$line"
done < <(cmus-remote -Q)
这实现相同的功能的awk脚本,只有不使用外部工具都没有。它可能比awk脚本慢。
我建议用awk:
awk 'seen && seen--; /tag genre/ { seen = 1 }'
seen
是真实的,打印就行了。seen
是真实的,递减的值,所以它会不再是真实的被打印的行的期望数量后seen
到要被打印随着sed
:
sed -n '/tag genre/{n;p}'
输出:
$ cmus-remote -Q | sed -n '/tag genre/{n;p}'
<some track>
什么只是排除了RE与另一个管? 'cmus-remote -Q | grep -A 1“标签流派”| grep -v“标签流派”'?当然,如果RE连续在两行上,它就会失败。 – ghoti
如果你的'grep'支持'-P'选项,那么它很简单,'grep -oPz'标签类型。* \ n \ K. *'文件' –