sed,awk

  1. ^ 行首定位符

    ^love 匹配所有以love开头的行

  2. $  行尾定位符

    love$  匹配所有以love结尾的行

  3. .  单个任意字符

    l..e  匹配以l开始后跟两个字符再跟一个e的字符串

  4. *  重复0到多个星号前面的字符

    a* 匹配0个或多个a的字符串

  5. []匹配一组字符的任意一个

    [Ll]ove  匹配Love或love的字符串

  6. [x-y]匹配指定范围的一个字符

    [A-Z]ove  匹配大写字符开头后跟ove的字符串

  7. [^]匹配不在指定组内的字符

    [^A-Z]  匹配不是大写字母的任意字符

  8. \  转义字符用来转义元字符

    love\.  匹配love后跟一个.的字符

  9. !  取反
  10. + 表示一个或多个

    xyz+ 一个或多个z

  11. ? 表式0个或一个

    xyz? 0个或一个z

  12. RE元字符
    1. \< 词首定位符\<love 匹配love开头的词
    2. |> 词尾定位符love\> 匹配love结尾的词
    3. \<bin\> 匹配一个单词
    4. \(..\) 给匹配的字符打上标签
  13. (lov)able\1er/ 模式lov被保存为标签1用\1表示

    查找一个字符串lov后跟上able,再跟上lov再接上er即:lovablelover

  14. x{m}和x{m,}和x{m,n}字符x重复出现:m次,至少m次,至少m次,并不超过n次
    o{5,10} 匹配包含5~10个o的字符串
  15. | 或者
    echo "tom and jerry"|sed -r ‘s/(tom) and (jerry)/\2 and \1/‘

    echo "tom g1,g2,g3 jerry"|cut -d" " -f2
    echo "abc def"| sed -r ‘s/([a-z]+) ([a-z]+)/\2 \1/‘
    echo "abc def"| sed -r ‘s/([a-Z0-9]+) ([a-Z0-9]+)/\2 \1/‘
    echo "abcgood"|grep -E "abc(good)*" --color 匹配abc后有一个或多个good的行
    echo "abchidhn"|sed -r ‘s/(.)(.*)/\1/‘ 用()切割字符
    echo "abc" |grep -E "abc{3}" {}之前字符c出现的次数为3次
    echo "abc defd xyz"|grep -E "\<[a-Z]{3}\>"匹配有三个字母的
    echo "abc"| grep -E "abc+" --color
    grep -E "^root|^tom" /etc/passwd
    echo "abc [email protected] def"|grep -E "[a-Z0-9._][email protected][a-Z0-9.]+\.[a-Z]{2,3}
    " --color

ps:HOST=$(/bin/hostname)
将()里的命令执行后的结果赋值给HOST变量

grep awk sed 是基于正则表达式设计的
用双引号将正则表达式引起来

sed  循环 一行一行的处理文件
sed -n ‘/abc/p‘ file 默认会打印模式空间的内容
行中匹配abc的打印出来  -r  支持扩展分割符,-n不让他默认打印模式空间

sed ‘/abc/p‘ file1
读取file1的第一行到pattern space(临时缓冲区, 内存)
对pattern space中的这一行进行/abc/p操作
将pattern space中的这一行打印出来
清空pattern space
读取file1的下一行到pattern space

sed [email protected] sed ‘s/abc/def‘ file  远程登录后修改file里的内容
sed -n ‘5p‘ file 把第五行打印出来

sed -n ‘$p‘ file  把最后一行打印出来

sed -n ‘1,3p‘ file  把一到三行打印出来

sed -n ‘1,~3p‘ file  从第一行开始打印三行

sed -n  ‘1p; 3p‘  file  打印第一行和第三行

sed -n ‘1,/def/p‘ file 从第一行开始直到碰到def的行全部打印出来

sed  -i ‘3i aaaaaaa‘ file  在第三行的前面加上aaaaaaa
sed  -i ‘$a  aaaaa‘ file  在最后行加入aaaaa
sed  -i ‘/^tom/i  aaaaaa‘ file  在以tom开头的行前一行加上aaaaaa

sed  -i  ‘s/abc/def/‘ file 改每一行的第一个abc成def
sed  -i  ‘s/abc/def/g‘ file 改每一行的所有abc成def
sed  -i  ‘s/abc/def/3‘ file 改每一行的第三个abc成def
sed  -i  ‘1,2s/abc/def/‘ file 改一到两行abc成def
sed  -i  ‘1,2s/^.*$/def/‘ file 改一到两行成def
sed  -i   ‘4c aaaaaaaaa‘ file  把第四行改为aaaaaaaa
sed  -i  ‘/^SELINUX/c  selinux ‘ 把所有以SELINUX开头的行改为selinux

sed  -i ‘/^abc/s/tom/jerry/‘  file  先找到以abc开头的行将这一行的tom改为jerry

sed -i ‘/abc/,/^def/s/123/456/‘ file  将abc开头的行和def开头的行之间的行的123改为456

s 换匹配的字段 c换匹配的行

sed  -i  ‘4d‘ 把第四行删除
sed  -i  ‘/^tom/d‘ file 删除以tom开头的所有行
sed  -i  ‘/^$/d‘ file  删除空行
sed  -i  ‘/^\s$/d‘ file  删除开头为空行   \s表示空格或tab

sed -i ‘/^mike/s/^/#‘ file 将mike行注释

sed ‘3s/abc/def/; 5s/abc/yyy/g‘ file1
sed ‘s/abc/def/; s/hij/xyz/‘ file1

sed -i -e ‘1s/jerry/tom/;   -e 3s/mike/xyz/‘  file  多条一起执行用-e

sed ‘/ADDR/s/^/#/‘ file1     行首加#
sed ‘/ADDR/s/^#//‘ file1     去行首#

sed -ri /^#ServerName.*:80$/s/^#// /etc/selinux/config
找出/etc/seliunx/config文件中以#ServerName开头以:80结尾的行
并将#替换成空白

& 保存查找串以便在替换串中引用
sed ‘s/tom/&jerry/‘ file1
       
范围匹配
sed ‘/abc/,/xyz/s/tom/jerry/‘ file1 abc到xyz中的
sed ‘/tom/,/jerry/d‘ file1
sed -n ‘/abc/,/xyz/p‘ file1
sed ‘1,/tom/d‘ file1 第1行到第1个匹配tom的行

引用变量
var1="root"
sed "/$var1/c aixocm" file1

sed -ri "/IPADDR/s/[0-9.]+/$ip/" ifcfg-eth0

sed -i "s|^${i}1*|#&|" /etc/fstab
#------------------------------------------------------------------------
awk 按行处理行里字段  循环命令
默认以空格作为分割符 默认打印整行$0 -F分割符   制定分割符
awk  ‘BEGIN{print  "aaaa"}/tom/{print $2}END{print "bbbbbbb"}‘  file1
先执行BEGIN里的语句 从文件中读取第一行是否匹配/tom如果有则执行没有就不执行
到读完后,再运行END的语句  可以选用BEGIN  匹配项 ENG。
awk ‘/^mike/{print $2}‘ file
awk ‘NR==2{print $2}‘  file    NR是行号 NF字段数
awk ‘NR==2||NR==4{print $2}‘ file   只读两个固定的行号
awk  ‘{print $0}‘ file  $0 整个行
awk ‘BENGIN{FS=":" OFS="  "}/bash$/{print $0}‘ file

FS 指定了分割符

OFS 指定了输出的字段分割符
tr ":" "" 将冒号改为空格
awk ‘BEGIN{i=10;echo$i}‘
awk -v v1=$a -v v2=$b  ‘BEGIN{print v1+v2}‘  将bash的值传给awk
awk -F: -v v1=$a ‘$0~v1‘{print $0} ~ 匹配条件
awk  ‘BEGIN{i=0;}{i++}END{print i}‘ file
awk ‘/^root/{$3+=10;print $3}‘ file
awk ‘$1~"root"{print $1}‘ file
awk ‘$1==500{print $1}‘ file  第一个字段为500
awk ‘$NF~"bash"{print $1}‘ file  最后一个字段是否有bash
awk  ‘$3>=500&&$3<=503{print $2}‘ file
awk  -F: -v v1=$a ‘$1~^v1‘  file 打印出以变量a开头的行
awk  -F: ‘{if($1~/^root/)print $1}‘ file   打印出第一个字段以root开头的行的第一个字段

next  直接读下一行

continue

exit 结束不读了

break

int()整数化

awk  ‘system("useradd" $2)‘ file   system()调用系统的命令

df -Th|grep "/$"|awk ‘{print $6}‘|sed ‘s/%//‘
df后截取某个字段并替换

tr 针对字符进行操作,单字符处理工具, 而不是字符串处理工具
cat file1 | tr "abc" "xyz"
a都替换成x, b都替换成y, c都替换成z,并不是将字符串abc替换成字符串xyz

echo "abc 11a22bc" |tr “abc” “xyz” 结果:xyz 11x22yz
tr "abc" "xyz"  <file  处理文件
tr "a-z" "A-Z" <file  将小写字母转成大写字母
tr ":" "\m"
echo "abdcdd"| tr -d "abc"将abc三个字符删除
cat file |tr -d “a-z”
echo “aaaaaaaaxcxxx cccccccc”|tr -s"abc" 将重复的abc字符压缩成一个字符

sort 排序  文件没改变
默认以空白作为分割符以第一个字段进行排序 (按字符串排asic)
sort -n file  以第一个字段的数值排序
sort -r 倒序
sort -k2  以第二个字段排
sort -t:以:分割字段
sort -t: -k3nr /etc/passwd

注意:先sort再uniq

uniq 去重复行 不改变文件
uniq file  只改变相邻的重复行
uniq -c  显示相邻的重复多少行
uniq -u 只显示没有相邻重复的行
cut  分割字符  默认分割符为tab键
cut -d: -f1-f3  file  指定分割符为:只要1  3字段

cut -d: -f1,3,5

echo  “addfgg” |cut -c3  取第三个字符

grep

grep -n ”root“ /etc/passwd  过滤出来加行数
grep -c ”root“ /etc/passwd  过滤出来的行号
grep -v ”root“ /etc/passwd  取反
grep -q ”root“ /etc/passwd  过滤出来的不显示
grep -w ”root“ /etc/passwd  过滤出来有单词root的行
grep -o ”root“ /etc/passwd  过滤出来root单词
grep -ro ”root“ 目录     过滤出来目录中文件里的有root的行
grep -i ”root“ /etc/passwd  忽略大小写
grep -E ”root“ /etc/passwd  启用扩展正则
grep -f file file1   过滤出file和file1中共同拥有的行
grep -f file file1 -v  过滤出file有file1没有的行
grep -x ”root“ file  过滤file中只含有root的的行
find

find . -nouser  把没有主人的文件找出来
find  .  +size +10000c  找出文件大于10000个字节的文件
find / -maxdepth 1  -name  “*.conf”  -maxdepth  不会找子文件
find . -perm  600  把权限为600的找出来
find . -name “*.sh”  |xargs  rm -rf {} 把文件找出后交给rm处理
find . -name “*.sh”  |xargs -I{} rm -rf {}  用-I 指定用什么表示查出的内容4
trap 屏蔽信号
trap ‘‘ 2  屏蔽中断信号,不做什么
trap ‘ls;pwd;date‘ 2 当出发中断信号(ctrl+c) 执行ls;pwd;date;
trap 2 还原

curl

curl -o a.html http://www.sohu.com/index.html 将搜狐的首页下载下载到a.html
curl -O  http://www.sohu.com/index.html 将搜狐的首页下载下来
curl -T file   ftp://10.0.2.253/ 将file文件上传到10.0.2.253中  用ftp协议

sed,awk

时间: 2024-10-04 06:11:52

sed,awk的相关文章

学习sed,awk最好的路径

编写shell脚本的时候,最常用的便是sed,awk等工具. 如果没有一个好的学习路径,学起来会发现"知其然,不知其所以然".很多别人写的脚本看不懂. 其实,这里可能主要有一个学习路径的欠缺.学习sed之前,应该先了解ed,这个远古时代的文本编辑器,只有对它有了相应了解,才能知道为何那么写.

十七. 正则以及grep ,sed,awk的简单应用

一.正则表达式:/ / grep,sed,awk 都能解释正则表达式 正则表达式:把一些特殊符号组合到一起描述字符和字符串的方法.^ 以什么开头 grep '^root' /etc/passwd$ 以什么结尾 如能登入系统的所有用 grep 'bash$'/etc/passwd. 任意一个字符 grep '^b.n' /etc/passwd 过滤取到bin的.* 所有字符* 代表前面的字符有0个或者无穷个 grep 'b*' /+ 必须用egrep 或 egrep -E 'ab+'表示前面的字符

值得一看的书之《sed&awk(第2版)》

想学习高级sed和awk可以去看看,收益匪浅. --2016年11月19日看完<sed&awk(第2版)> 下载链接:http://down.51cto.com/data/2264410(需要一个下载豆) 值得一看的书之<sed&awk(第2版)>

Linux的文本编辑diff & sed & awk & grep

grep(关键字: 截取) 文本搜集工具, 结合正则表达式非常强大    主要参数 []    -c : 只输出匹配的行    -I : 不区分大小写    -h : 查询多文件时不显示文件名    -l : 查询多文件时, 只输出包含匹配字符的文件名    -n : 显示匹配的行号及行    -v : 显示不包含匹配文本的所有行(我经常用除去grep本身)    基本工作方式: grep 要匹配的内容 文件名, 例如:    grep 'test' d* 显示所有以d开头的文件中包含test的

LINUX 下 find grep sed awk 的常见基本用法特点

LINUX 下 find grep sed awk 的常见基本用法特点 只为让自己具有更高的水准,这就开始了长达6个月的小白进阶路! 这几天学习linux基础命令有点犯蒙,尤其是对文件查找这块.所有我想把一些我觉得常用的实用的参数项总结下来,大神勿喷哈... 不到之处请大家指教,小女子在此谢过了. 一.find:命令用于查找文件系统中指定的文件,其命令格式为: 1.find pathname -options [ -print  -exec  -ok ... ] (1)find 命令的参数: p

linux sed&awk详解

sed sed为文本处理三剑客之一.本身就是一个管道命令,可以将文件进行增加,修改,删除,选取等操作. 格式:sed [-nrefi] [command] "文本字符串" 选项: -r: 支持扩展正则表达式: -n: 静默模式:(sed有个模式空间和保持空间,默认sed会将执行的结果保存到模式空间里面,而模式空间默认情况是输出在屏幕上,加了-n,则阻止将模式空间的内容输出到屏幕上) -f:/path/to/script_file:从指定的文件中读取脚本并运行 -e script1 -e

sed awk 笔记(二)

都说sed awk 运维人员的必备工具.今天起开始整理相关笔记.首先认识一下这两个东西. 共性:使用相同的语法 [address]/pattern/action/flag 都是面向字符流的.从一个文件一次银行的读取输入.并输出到标准输出.即输入驱动的 都是使用正则表达式进行模式匹配的 都允许用户在脚本中指定指令 所以个人认为有几个方面需要突破:语法.正则.编写脚本的思路 [[email protected] test]#今天写的脚本显示洲及所在州的人名 #! /bin/sh awk -F ",&

使用GoAccess分析Nginx日志以及sed/awk手动分析实践

前言 使用Nginx的网站可能会遇到访问流量异常.被友情检测.程序出现Bug等各种突然情况,这时大家的反应想必都是第一时间分析日志,然后发现日志有几十GB之多,又需要按照时间.错误类型或者关键字段检索信息时会不会有种醍醐灌顶.菊花一紧的错觉.文中介绍的方法不管是GoAccess还是sed/awk虽然可以解决一时的问题但未必能够治本,也许ELK(Logstash+ElasticSearch+Kibana)对我们大多数人来说是更合理的集中化日志管理解决方案. 日志固然重要,但努力建设适合业务发展的集

Sed&amp;awk笔记之sed篇(转)

Sed是什么 <sed and awk>一书中(1.2 A Stream Editor)是这样解释的: Sed is a "non-interactive" stream-oriented editor. It is stream-oriented because, like many UNIXprograms, input flows through the program and is directed to standard output. Sed本质上是一个编辑器,

sed awk 等工作指令

sed -e 's/SB[-_][a-zA-Z].*[0-9]*-/192.168./g' sandboxip > a sed -e 's/[A-Z].*[-_][a-zA-Z].*[0-9]*-/192.168./g' sandboxip > a awk '!a[$1]++' st3ip find /opt/log/ -ftype f -mtime 3 -exec rm -rf {} \; awk 'NR%2==0' FILE awk 'NR%2==1' FILE awk '!a[$1]++