正则表达式计算字符

时间:2014-01-03 19:21:49

标签: regex bash

我正在尝试验证|的数量在文件的行中。在这个例子中,它检查恰好5个柱。

^[\|]{5}$

这会验证5,但不会考虑/忽略其他字符。

Dice|Puppy|Button|Sunny|Music|Extra

我错过了什么?正则表达式总是让我失望。

2 个答案:

答案 0 :(得分:5)

试试这个正则表达式:

^[^|]*(\|[^|]*){4}$

答案 1 :(得分:3)

计算管道数量:

line='Dice|Puppy|Button|Sunny|Music'
npipes="$(echo "$line" | tr -c -d '|' | wc -c)"

测试管道数是否为5:

[ "$(echo "$line" | tr -c -d '|' | wc -c)" -eq 5 ] && echo success

在这种方法中,translate(tr)用于删除除pipe之外的所有字符。 (它删除(-d)除(-c)管道符之外的所有内容。然后,字数(wc)用于计算字节数(-c)。可以使用标准bash等式测试(-eq)将此数字与5进行比较。