Shell4-grep、cut、sed、awk

Shell4-grep、cut、sed、awk

grep

-E使用正则: echo this is a line. | grep -E "[a-z]\."

  1. -o只输出匹配到的文本
  2. -v除匹配到的所有行
  3. -c匹配的行数,匹配数:echo -e "this is a word.\n next line." | egrep -o "[a-z]\." | wc -l
  4. -n匹配到在第几行
  5. -b -o位于改行的第几个开始字符
  6. -l搜索多个文件,匹配搜索到的文件,-L取反,文件中匹配不到的。
-
  1. -R递归搜索文件: grep "text" . -R -n
  2. -i忽略大小写: grep -i Liunx sample.txt
  3. -e匹配多个样式:grep -e not -e linux sample*.-f输入多个匹配样式的文件
  4. -Z使用\0分隔,删除匹配的文件grep "test" file* -lZ | xargs -0 rm
  5. -A(After)匹配结果之后的行
  6. -B(Before)匹配结果之前的多少行
  7. -C结果前后的几行

cut

  1. 获取1,3列:cut -f1,3 student_data.txt
  2. --complement:取反列
  3. -d指定定界符,echo a,b,c,d | cut -f2 -d","
  4. -c第几个到第几个字符,cut -c1-5 student_data.txt

sed

  1. 移除文件的空白行sed '/^$/d' file1
  2. 已匹配标记&:sed 's/\w\+/[&]' file1,匹配单词,标记为[word].
  3. 子串匹配标记\1:echo seven EIGHT | sed 's/\([a-z]\+\) \([A-Z]\+\)/\2 \1/'
  4. 双引号求值:test=hello;echo hello world | sed "s/$text/HELLO/"
  5. -i修改替换原文件
  • 对js文件进行压缩:catsample.js | tr -d '\n\t' | tr -s ' ' | sed 's:/\*.*\*/::g' | sed 's/ \?\([{}();,:]\) \?/\1/g '

awk

循环处理文件的每一行

  1. 特殊变量:$0当前行,$1当前行第一个字段的内容,NR当前行号,NF当前行的字段数。seq 5 | awk 'BEGIN{ sum=0;print "Summation:"} {print $1"+"; sum+=$1 } END{ print "=="; print sum }'
  2. getline读取行

some用例

  1. 迭代行、单词和字符while read line; do for word in $line; do for((i=0;i<${#word};i++)) do echo ${word:i:1} ; done ; done; done < file1${#word}返回word的长度。
  2. paste按列合并文件,-d指定定界符,paste file1.txt file2.txt -d ","
  3. 文件的第几列,ls -l | awk '{ print $1 " : " $9 }'
  4. 文件的第几行到第几行:awk 'Nr==3,NR=7' file1.txt
  5. 匹配之间的行,以start的行到end之间的行,awk '/start/, /end/' file1
  6. 反转,反正句中的所有单词:echo "this is line." | rev | tr ' ' '\n' | tac | tr '\n' ' ' | rev
  7. 逆序打印行,seq 9 | tac(cat => tac),使用awk:seq 9 | awk { lifo[NR]=$0; lno=NR} END{ for(;lno>-1;lno--){ print lifo[lno]; } }
  8. 匹配电子邮箱地址,egrep -o '[A-Za-z0-9.]+@[A-Za-z0-9.]+\.[a-zA-Z]{2,4}' url_email.txt
  9. 匹配URL,egrep -o "http://[a-zA-Z0-9.]+\.[a-zA-Z]{2,3}" url_email.txt
  10. 移除包含某单词的句子,echo this line. this is gun, is so fun. this is bash. | sed 's/ [^.]*so fun[^.]*\.//g'
  11. awk实现head,awk 'NR <=10' file1
  12. awk实现tail,awk '{ buffer[NR % 10] = $0; } END { for(i=1;i<11;i++) { print buffer[i%10] } } ' paste.txt, $0当前行的文本。
  13. awk实现tac,awk '{ buffer[NR] = $0; } END { for(i=NR; i>0; i--) { print buffer[i] } }' file1
  14. 文本替换,var="this is a line of text"; echo ${var/line/LINE},文本切片,string="asdfepklcjda"; echo ${string:4:9}

Linux Shell Scripting Cookbook

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值