【大数据】Spark优化经验&案例--数据倾斜 《Mysql必知必会》读书笔记 jar包名中自动添加git commit id PyCharm教学视频学习笔记 《SQL基础教程》简要总结 《设计师要懂心理学》读书笔记 MySQL与MariaDB学习笔记 WDT (Folly) 安装指南 -- CentOS 7 [solved]Page build failed(Jekyll) 数据包过滤及分析实例 tshark tcpdump Scala Tour 学习总结 “Docker容器和容器云”读书笔记(1) “Docker Practice”读书笔记 “图解基础设施设计模式”小结 “图解服务器端网络架构”小结 Python网络安全编程 数据包解析笔记 华为挑战赛(1) DDoS攻击防御与云服务 基于网络回溯分析技术的异常行为分析 “Linux程序设计”小结(进程间通信) C语言编程规范(华为软件精英挑战赛) 2017阿里在线编程题--单源最短路径问题 2017年阿里在线编程题-- 数串分组 Uinx/Linux上的帮助查询命令 你懂C,所以C++不在话下 一篇特别长的总结(C专家编程) 程序员面试金典--笔记(精华篇) C陷阱与缺陷--笔记 半小时搭建电子商务网站--opencart linux网络知识和工具(持续更新) 网卡参数查询及设置工具ethtool 高性能流量生成工具trafgen(DDoS模拟) Linux流量控制工具TC 流量控制工具TC详细说明 tcpdump过滤数据包,结果不对? Lecture 网络攻击与防御技术笔记 gotgit-git权威指南 高效使用MacOS所要知道的 shell内置字符串处理 配置ntp(知其所以然) 360黑客攻防技术分享会--记录 中毒U盘恢复--快捷键病毒 Tor--anonymity network介绍(PPT) IBM bluemix 再读《Linux Shell脚本攻略》 linux shell 学习摘记(9) linux shell 学习摘记(8) linux shell 学习摘记(7) linux shell 学习摘记(6) linux shell 学习摘记(5) linux shell 学习摘记(4) linux shell 学习摘记(3) linux shell 学习摘记(2) linux shell 学习摘记(1) firefox vim 插件 vimperator A Byte of Vim 笔记 windows注册表小知识 安全测试工具篇(开源&商业) 安全及性能测试工具(网站收集) 性能测试工具 屡试不爽的“3个”iPad使用技巧 Shell Shortcuts(和Tab键一样实用) vim--自动添加jekyll post信息头 vim 自动给文件添加头部信息 GitHub Tips (很实用,值得收藏) Linux路由、防火墙、NAT命令

linux shell 学习摘记(4)

2016年09月26日

《linux shell 脚本编程攻略 (第2版)》 第四章 “让文本飞起来” 笔记

主要命令: 正则表达式, grep/egrep, sed, awk, cut, find, xargs, tr, 变量切片

  • 正则表达式 详细参考
    1. ma(tri)?x 匹配max或matrix
    2. Oct (1st|2nd) 匹配 Oct 1st 或者 Oct 2nd
    3. 将正则表达式可视化
  • grep
    1. grep -E "[a-z]+" filenameegrep "[a-z]+" filename;
    2. echo this is a line. | egrep -o "[a-z]+\." 只输出文件中匹配到的文本部分,-v`打印出匹配行之外的所有行
    3. grep -c "text" filename 统计匹配行的数量,并不是匹配数目; echo -e "1 2 3 4 \nhello\n 6" | egrep -o "[0-9]" | wc -l
    4. grep linux -n XXX包含匹配字符串的行号;grep -b -o "not" XXX 打印模式匹配所位于的字符或字节偏移
    5. grep -l linux sample1.txt sample2.txt 搜索多个文件并找出文本位于哪一个文件中
    6. grep "text" . -R -n 递归搜索, -i忽略大小写
    7. grep -e "pattern" -e "pattern"匹配多个样式
    8. grep -f pattern_filesource_filename 匹配模式文件, --include *.{c, cpp}, --exclude "README"
    9. grep "test" file* -lz | xargs -0 rm 以0值字节作为终结符的文件(\0)
    10. 可打匹配结果前后的内容, 如seq 10 | grep 5 -A 3 匹配某结果之后的3行, -B匹配某个结果之前的几行, -C 匹配某个结果之前和之后的几行
  • cut -f3 --complement student_data.txt 打印出第3列之外的所有列

  • cut还可将一串指定的字符作为列来显示 cut fields.txt -c1-3,6-9 --output-delimiter "," 提取第1-3字符为第一列6-9字符为第二列, 以,为区分, 还可更换参数为-b 按字节, -f`用于自定义字段

  • sed
    1. sed: Stream Editor 默认情况下sed只会打印替换后的文本,若要同时保存到源文件需要-i选项, /在sed为定界符,同样也可以使用:,|
    2. 移除空白行 sed -i "/^$/d" file
    3. sed -i 's/\b[0-9]\{3\}\b/NUMBER/g file.txt \b表示文件边界
    4. sed -i .bak 's/abc/def/' file sed执行替换时,会穿件一个名为file.bak的原始文件副本
    5. 已匹配字符串标记$, `echo this is an example sed ‘s/\w+/[&]/g’
    6. 子串匹配标记(\1)
    7. 组合多个表达式 sed 'expression' | sed 'expression'sed 'expression;expression'sed -e 'expression' -e 'expression'
    8. sed 表达式通常用单引号引用,不过也可以用双引号(有变量时会很有用)。其会先对表达式求职然后在进行应用。 sed "s/$text/HELLO/"
  • awk
    1. awk脚本被包含在单引号或双引号之间
    2. 在awk中print的参数是以逗号进行分隔的,打印时以空格为定界符,而双引号被作为拼接符
awk 'BEGIN { begin statements } pattern { commands } END { end statements }'  
  
awk '{ print 1 "-" 2 "-" 3;}'  
awk '{ print 1,2,3; }'  
  • 压缩或解压JavaScript 下面是列子,并不能实际用 请依赖专业的工具
    1. 压缩 cat sample.js | tr -d '\t\n' | tr -s ' ' | sed 's:/\*.*\*/::g' | sed "s/ \?\([{}();,:]\) \?/\1/g'
    2. 解压 cat obfuscated.txt | sed 's/;/;\n/g' | sed 's/{/{\n\n/g' | sed 's/}/\n\n/g'
  • 按列合并多个文件 paste file1.txt file2.txt -d ","

  • 打印文件中的第五列 awk '{ print $5 }' filename, 打印当前目录下各个文件的权限ls -l | awk '{ print $1 " : " $8 } filename

  • 对目录中所有的文本进行替换
    1. find . -name *.cpp -print0 | xargs -I{} -0 | sed -i 's/Copyright/Copyleft/g' {}
    2. find . -name *.cpp -exec sed -i 's/Copyright/Copyleft/g' \{\} \; 为每一个超找到的文件调用一次sed
    3. find . -name *.cpp -exec sed -i 's/Copyright/Copyleft/g' \{\} \+ 将多个文件名一并传给sed
  • 切片
[root@share ~]# var=shiwenfeng  
[root@share ~]# echo ${var/shi/yes/}  
yes/wenfeng  
[root@share ~]# echo ${var:4}  
enfeng  
[root@share ~]# echo ${var:4:2}  
en  
[root@share ~]# echo ${var:(-1)}  
g  
[root@share ~]# echo ${var:(-2):2}  
ng  
[root@share ~]#   

知识共享许可协议
SWF's Hacking Dreamonephone 创作,采用 知识共享 署名-非商业性使用 4.0 国际 许可协议进行许可。
© 2011-2024. All rights reserved by onephone. Powerd by Jekyll.