shell or sed or awk tips

来源:互联网 发布:徐州工程学院网络 编辑:程序博客网 时间:2024/06/05 15:42

希望自己能静下心来做一件事 有安排 有计划 不懒惰 不懈怠 用心做事 用心做产品 


---------------------------------------------------------- 这里是分割线--------------------------------------------------------------


1:ls | sed "s:^:`pwd`/:"  是利用ls打印绝对路径 其实就是ls然后用sed添加一个pwd

2:sed -n '1 h;1!H;${ g; s/\n//g; p}'  将下一行合并到上一行

3:grep -n "KPopupWidget" -r ./ 查找当前目录和其子目录下所有的含有KPopupWidget 字符的文件名 以及其行号



---------------------------------------------------------- 这里是分割线--------------------------------------------------------------


一:

从ed开始说起吧 

1:ed总的来说和 sed的名字还是长的挺像的 ed是一个行编辑器 也就说在处理的时候专注的对象仅仅只有一行而已 同理基于ed的sed也是仅仅专注一行

so:当要处理整个文本中所有匹配模式的行的时候要用到全局命令g 否则之后只匹配第一次匹配 处理第一次匹配的行

then:有必要说说这个语法了     global command / regular pattern(to find address)  s/regular pattern(to matching the key)/replacement string/ tag

that's to say:g/xxxx/ s/aaaaa/bbbbb/g 就是匹配所有满足xxxx的行  在这些行里面找到所有的aaaaa(因为最后的标记也是g)替换成bbbbb

(多一句废话  sed是会逐行执行的 )


2:grep 所有就是 g/ re /p p(标记就是print) (g command就是 全局)翻译出来就是 全局 正则表达式 打印  所以grep可以用 sed实现

so这么写: g/regular s/\(^*\)/\1/p (我也不知道这个是不是对的 大概就是这个意思了 我也是初学者 见谅)


3:BB几句awk吧 优雅的一米  /regular/ { print $n}  前面是匹配满足regular的行 {}代表取出其中一行然后将要执行的动作写在大括号里面 就是了 例如打印 

awk也是 模式+语句+文件 


4:sed -option  sed-seg file   一般喜欢-n 然后在语句里面加入 /p 这样就能打印只受影响的行了


5:很有必要告诉大家一句:在正则表达式中 *代表的是重复 代表上一个字符的一次或者n次重复 例如 A* 匹配 A AA AAAAA 而不能匹配 AB

e.x.

tianzhentekiMacBook-Pro:test Angel$ cat a.txt theandthe123theandtheaAbcdEAAEAEAAAAAAAAAAAAAEABEAB  FINEAB EFFABEFA_FFVBEtianzhentekiMacBook-Pro:test Angel$ grep 'A*E' a.txt AbcdEAAEAEAAAAAAAAAAAAAEABEAB  FINEAB EFFABEFA_FFVBEtianzhentekiMacBook-Pro:test Angel$ grep 'AA*E' a.txt AAEAEAAAAAAAAAAAAAEtianzhentekiMacBook-Pro:test Angel$ grep 'AA.*E' a.txt AAEAAAAAAAAAAAAAE


介绍下扩展正则表达式 

POSIX字符集 awk + egrep

6:字符类  由 [:  dxt :] 包围的关键字 注:1:dxt是俺心上人的名字 程序猿都只有心上人没有女朋友 注:2dxt == alnum 可打印的字符包括空白 dxt == alpha字母字符 dxt == blank 空格或者制表符  dxt == cntrl 控制字符 dxt == digit 数字字符 dxt == graph 可打印和可见的(空格被抹杀了)

dxt == lower 小写 dxt == print 可以打印的 dxt == punct 标点 dxt = space 空白dxt == upper大写 dxt == xdigit 十六进制 

dxt == SB 没错就是我的二货老婆小雪了

       整体符合 [,dxt.] 将dxt当作一个整体就像喜欢她是喜欢她的全部而不是她的咪咪

       等价类 [=e=] 这样可以匹配诸如很多看不到法文字母等          以上使用方法[ [ : : ] ] 懂么

7:说下正则表达式的贪婪性吧 :例如 ".*" 就会去匹配某行中第一个双引号和最后一个双引号之间所有的字符和以及引号  貌似就是这样的

8: * 号放在类后面 [ ]* 也就是说可以匹配类中任意数目的字符 使得类中任意字符以任意顺序匹配 并且匹配任意多的次数

9:字符类后面的 []? 的问号代表0次或者多次匹配


10:sed和grep中只有当^ 和 $ 处于正则表达式的开始和结尾的时候才是特殊的 在awk中始终都是特殊的

11:sed的模式中 没有指定的则用于每一行 指定则用于匹配行 两个(由逗号分开)匹配的第一个开始直到匹配第二个结束    如果后面加了(!)用于不匹配该行的所有结果

原创粉丝点击