grep表示任意长度的字母数字字符串,每边带有一个冒号


14

如何对1到50个字符的字母数字字符串进行grep编码(理想情况下,任何长度都可以),每边都带有一个冒号-典型的结果是所有包含该字符串的行:shopping:。到目前为止,下面的代码(我已经尝试了一些变体)无法正常工作:

grep ':[[:alnum:]]{1,100}:' ~/x.txt

您只需要grep通过包含-E开关来启用扩展的正则表达式功能即可。
slm

Answers:



4

使用基本的正则表达式,您可以将其编写为:

grep ':[[:alnum:]]\{1,100\}:' ~/x.txt

需要注意的是\{(相对于\+\?例如)是标准的和便携的,并且实际上的BRE当量+?通常与写\{\{1,\}\{0,1\}grep -E尽管它也是标准且可移植的,所以您最好使用它,因为在这种情况下,它使可读性更强的正则表达式。


1

您正在使用扩展的常规表达式,因此需要使用-E选项:

grep -E ':[[:alnum:]]{1,100}:' ~/x.txt

谢谢!我将另一个答案视为正确,因为我没有在标题中写下我的“理想”脚本,并且我不想让使用谷歌搜索答案的人粘贴错误的答案,但是我会用你的答案。:)

1
@TorThommesen-如果不正确,您可以编辑Q的标题。
slm

0

由于没有人提到它,因此您也可以使用egrep,据我所知,它等效于grep -E

egrep ':[[:alnum:]]{1,100}:' ~/x.txt

1
egrep是使用ERE进行grep的历史命令。自很久以前,grep和egrep的功能已通过-E选项合并到grep中。egrep现在被认为已过时/已弃用(但不太可能消失,因为有些人仍然习惯了)。
斯特凡Chazelas
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.