如何 grep 查找 1 到 50 个字符的字母数字字符串(理想情况下,任何长度都可以),两侧各有一个冒号 - 典型的结果是包含该字符串的所有行:shopping:
。到目前为止,我已经得到了下面的代码(我已经尝试了一些变体),但它不起作用:
grep ':[[:alnum:]]{1,100}:' ~/x.txt
答案1
您需要为此启用扩展正则表达式:
grep -E ':[[:alnum:]]+:' ~/x.txt
答案2
使用基本的正则表达式,你可以这样写:
grep ':[[:alnum:]]\{1,100\}:' ~/x.txt
请注意,\{
(与\+
或\?
相对)是标准且可移植的,实际上+
和的 BRE 等效项通常用:和?
编写。不过,它也是标准且可移植的,因此您不妨使用它,因为在这些情况下它可以使正则表达式更具可读性。\{
\{1,\}
\{0,1\}
grep -E
答案3
您正在使用扩展正则表达式,因此需要使用 -E 选项:
grep -E ':[[:alnum:]]{1,100}:' ~/x.txt
答案4
由于没有其他人提到它,您也可以使用egrep
,据我了解,它相当于grep -E
。
egrep ':[[:alnum:]]{1,100}:' ~/x.txt