如何grep粗体文字

时间:2014-08-26 18:14:29

标签: bash grep

有一个文本包含粗体字,例如手册页。如何仅使用粗体文本?粗体文本可以包含" - "。例如,

echo -e "Normal \e[1mBold1 \e[21mNormal Normal \e[1m--Bold-2 \e[21mNormal" 

返回

Normal **Bold1** Normal Normal **--Bold-2** Normal

现在我想要像

这样的东西
echo -e "Normal \e[1mBold1 \e[21mNormal Normal \e[1mBold-2 \e[21mNormal" | egrep -o 'bold only'

所以输出是:

Bold1   的 - 粗体-2

我试过像

这样的东西
echo -e "Normal \e[1mBold1 \e[21mNormal Normal \e[1m--Bold-2 \e[21mNormal" | egrep "\e\[1mBold1 \e\[21m"

但它什么也没有返回。

1 个答案:

答案 0 :(得分:2)

问题是在输出中你没有得到\e或类似的东西。你正在获得逃脱角色。 (将输出转储到xxd以查看我的意思。

这意味着您需要在grep模式中使用文字转义字符。

最简单的方法是使用$'..'引用。

echo -e "Normal \e[1mBold1 \e[0mNormal Normal \e[1m--Bold-2 \e[0mNormal" | grep -P -o $'\e\[1m.*?\e\[0m'

据说这是一件非常丑陋的事情,一般都是最好的,绝对是最好的避免。