我希望有人可以回答我的快速问题,因为我疯了!
我最近开始在我的Java编程中学习正则表达式,但是如何让某些功能直接在BASH中正常工作有点困惑。例如,以下代码无法正常工作。
echo 2222 | grep '2\{2\}'
我期待它回归:
22
我尝试过各种变体,包括:
echo 2222 | grep '2{2}'
echo 2222 | grep -P '2\{2\}'
echo 2222 | grep -E '2\{2\}'
然而,我完全没有想法。我确信这是一个简单的参数/语法修复,并希望得到一些帮助! P.S我已经完成了大量的谷歌搜索,我找到的每个参考文献都不适用于BASH;正则表达式可以在很多不同的平台和引擎上运行= /
答案 0 :(得分:9)
echo 2222 | grep -E '2{2}'
2222
正则表达式将在该行上进行模式匹配,如果匹配则打印整行(2222),如果不匹配则打印出来。
它不会拉出一部分输出。为此,你需要像sed这样的东西:
echo 2222 | sed 's/.*\(2\{2\}\).*/\1/'
22
答案 1 :(得分:4)
您可以使用:
echo 2222 | grep -o '2\{2\}'
除了它将显示输出两次,因为它在该行上匹配两次。
答案 2 :(得分:1)
echo 2222 | grep -E '2{2}'
那将会回归 2222就是说“它与你的线匹配”
sed可以帮助您可视化您的正则表达式
echo 22 33 342 22 | sed 's/2\{2\}/<match>/g'
返回例如
<match> 33 342 <match>
答案 3 :(得分:1)
如果您只是在字符串的开头搜索两个“2”,则无需使用外部工具
string=2222
case "$string" in
22*) echo "ok";;
esac