有一个文本包含粗体字,例如手册页。如何仅使用粗体文本?粗体文本可以包含" - "。例如,
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"
但它什么也没有返回。
答案 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'
据说这是一件非常丑陋的事情,一般都是最好的,绝对是最好的避免。