终端的几个命令
在文件中搜索字符:
grep + 字符 + 文件名
在文件中搜索到字符后,向下显示3行(向上显示3行是-B)
grep + 字符 + 文件名 -A 3
grep默认是大小写敏感,如果不想区分大小写,后面加上-i
grep + 字符 + 文件名 -A 3 -i
搜索除了某字符之外的所有字符:加上-v(反转的意思):
grep -v + 字符 + 文件名 -A 3 -i
只搜索字符后面带s的字符
grep + 字符 + [s] + 文件名
只搜索字符后面不带s的字符
grep + 字符 + [^s] + 文件名
通过正则去搜索文件中的内容:
grep + 正则表达式 + 文件名
启用扩展正则表达式:
grep + -E + 正则表达式 + 文件名
echo "字符" | grep "正则表达式"
他会用正则去匹配前面的字符,匹配到了才输出
搜索带字符的一行:可以用锚点操作符
练习题一:
假定egrep '(fooq|foo)*(qbarquux|bar)'分析的字符串是:
A.fooqbarquux B.fooqbar C.以上都选
答案:C
- (fooq|foo):分组操作符,可以是fooq也可以是foo开头
- * :重复操作符,可以0次或者多次
- (qbarquux|bar):分组操作符,可以是qbarquux或者bar结尾
假定egrep ‘((a*)b)*\1\2'分析的字符串是
A.aabababa B.aabaabaabaabaa C.以上都不选
答案:B
- (a*):a可以重复一次或者多次
- (a*)b:代表a可以多个,但是b只有一个
- ((a*)b)* :代表小括号里面的可以多个
- 如果分组不止一次匹配(例如后面跟着重复运算符,也就是\*),则向后引用将匹配分组最后匹配的字符串,所以"\1" = aa ,"\2" = 空
假定egrep ‘(one(x)|two(y))-and-(three\2|four\3)’分析的字符串是
A.onex-and-threex B.twoy-and-foury C.onex-and-four D.twoy-and-threey E.twoy-and-threex F.以上都不对
答案:AB
- (one(x)|two(y)):组1
- (x):组2
- (y):组3
- A:前面匹配了1次,所以x=x,\2=x,所以A正确
- B:前面匹配了2次,所以y=y,\3=y,所以B正确
匹配字符串“license: "creativecommons.org/licenses/by…
答案:
- 完全版: (license)[:](\s*)["":./,\-%A-Za-z0-9]\*
- license开头,后面跟着:,然后重复0-n个空格,再包含的各种字符的n个循环
- 简洁版: (license)(.*)
- (.*):匹配除了换行符之外的所有字符
对指定库中的符合指定的正则表达式的函数下断点
(lldb) breakpoint set —func-regex=.—shlib=libfoo.dylib
对符合指定的正则表达式的符号(也就是函数名)下断点
(lldb) breakpoint set --func-regex regular-expression
通过对指定的正则表达式对⽂件内容设置断点
(lldb) breakpoint set --source-pattern-regexp regular-expression --file