grep回顾
grep简介
grep - 2 用更多Option
grep 可以搭配Regexp
Regex其实有分Basic
Regexp(BRE)、Extended
Regexp(ERE)、Perl
Regexp
我这里只举出分别或差异, 如果...後面我想到要特别分享Regex在讲完整点
BRE | ERE | 描述 |
---|---|---|
无 | + | >=1次 |
无 | ? | 可选用的匹配, i.e. 出现0或1次 |
无 | | | Or |
\{n,m\} | {n,m} | 匹配前面文字n到m次 |
\(\) | () | BRE是Back Reference, EXE则是分组 |
在BRE里面遇到特殊符号像上面的{},(), 或者搜寻字串内真的是.*这种的,都需要透过\
做转义
# 准备假资料
cat > grepText.txt <<EOF
love loove live l0ve lOve l@ve
EOF
grep 'l[a-zA-Z0-9]*ve' grepText.txt
这里我们想找到满足l(中间是字母或数字)ve的, 搭配Regexp的话通常就是[a-zA-Z0-9]*
但Regex也提供特定字元\w
用来比对所有字母或数字
grep 'l\w*ve' grepText.txt
也能去找到满足l(中间是非字母或数字)ve的, 搭配Regexp的话通常就是[^a-zA-Z0-9]*
^
就是不包含以下字串的意思
也能透过\W
来取代, 跟上面的\w
比较, 这里是大写的W
grep 'l[^a-zA-Z0-9]*ve' grepText.txt; \
grep 'l\W*ve' grepText.txt
还有一种是字串边界(Word Boundary), 就是找出完整的单字, 但这找出来的单字, 不是某个字串内的字.
透过\<单字\>
或是\b单字\b
来找寻.
# 准备假资料
cat > grepText.txt <<EOF
love loove live l0ve lOve l@ve lovelove
EOF
grep '\<love\>' grepText.txt; \
> grep '\blove\b' grepText.txt
但如果我们把*
想改成+
至少一次
会不会成功呢?
会发现都找不到
不然就是要加上\
跳脱符号
这是因为+
是extended
grep 搭配 extended Regex, 则需要搭配option -E
, 或者用grep家族中的egrep
grep -E 'l[a-zA-Z0-9]+ve' grepText.txt; \
> egrep 'l[a-zA-Z0-9]+ve' grepText.txt
还有个比较少用的
grep -F
和grep家族中的fgrep,
用来快速查找字串用, 但不支持Regexp.
grep提供非常多种Regexp的支持, 下篇在继续分享.
在非常多文件, 或者文件内容非常多的时候, grep会非常好用又快速查找.
能否用grep, 只取得这段文字中的数字呢?
累计文章数 5840篇 参赛组数 1087组 团队组数 052队 完赛人数 敬请期待
Ans:
echo "累计文章数 5840篇 参赛组数 1087组 团队组数 052队 完赛人数 敬请期待" | grep -oE '[0-9]{1,5}'
> 5840
> 1087
> 052
# 搭配Perl Regexp中的positive lookbehind, 找数字前面是空格的
# perl regexp这些用法日後再分享
echo "累计文章数 5840篇 参赛组数 1087组 团队组数 052队 完赛人数 敬请期待" | grep -oP '(?<= )\d+'
> 5840
> 1087
> 052
<<: Day 5 - [Zenbo开发系列] 02-建置与Zenbo规格相同的模拟器
>>: D9-用 Swift 和公开资讯,打造投资理财的 Apps { 台股申购实作.2 -读取Big5码的csv}
天亮了 昨晚是平安夜 关於迷雾森林故事 香水 在场本来许多animal们牵着喜鹊儿的翅膀小手跳舞 都...
嗨我是A Fei,连续好几天都十一点多回家,真的是累翻,先来看看今天的题目: Time to win...
运算子是函数 运算子事实上就是一种函数,有赋值运算子,比较运算子,算术运算子,位元运算子, 逻辑运算...
from Unsplash 为什麽工程师也要懂产品设计? 前面笔记提过,现代科技秒新分异、资讯爆炸...
动态型别 定义:变数会因为值性质的不同,而在***执行阶段***才会赋予确立型别有不同的型别;同一个...