(一)sed

sed是一个精简的、非交互式的流式编辑器,它在命令行中输入编辑命令和指定文件名称。然后在屏幕上查看输出。

逐行读取文件内容存储在暂时缓冲区中,称为“模式空间”(pattern space)。接着用sed命令处理缓冲区的内容,处理完毕后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断反复,直到文件末尾。原文件爱你的内容并没有改变。

sed '4,$d' test.in # 删除4~最后一行
sed '3q' test.in # 读到指定行之后退出
sed 's/public/PUBLIC/' test.in # 替换public为PUBLIC
sed -n 's/public/PUBLIC/p' test.in #打印匹配行

sed [options] sed_cmd files

-e 连接多个编辑命令
    -f 指定sed脚本文件名称
    -n 阻止输入行自己主动输出

通常grep也能达到效果。比如统计指定文件里的行数
COUNT=$(cat $FILE | grep -a "keyword" | wc -l)

指定多个命令的三种方法:
1.用分号分隔命令

sed 's/public/PUBLIC/;s/north/NORTH/' test.in

2.每一个命令前放置-e

sed -e 's/public/PUBLIC' -e 's/north/NORTH' test.in

3.使用分行命令功能,在输入单引號后按Enter键就会出现多行提示符(>)

sed '
> s/public/PUBLIC/
> s/northNORTH' test.in

经常使用的定位命令:

常见的编辑命令:

p: 打印匹配行
sed -n '3,5p' test,in
=: 显示匹配行的行号
sed -n '/north/=' test.in
d: 删除匹配的行
sed -n '/north/d' test.in
a\: 在指定行之后追加一行或者多行文本,并显示加入的新内容。

sed '/north/a\AAA\ >BBB\ >CCC' test.in i\: 在指定行之前插入一行或者多行文本。并显示新内容,同上。

c\: 用新文本替换指定的行,使用格式同上 l : 显示指定行中的全部字符,包含控制字符(非打印字符) sed -n '/north/l' test.in s:替换命令。使用格式为 [address] s/old/new/[gpw] address:假设省略。表示编辑全部的行 g: 全局替换 p: 打印被改动后的行 w fname: 将被替换后的内容写到指定的文件里 sed -n 's/north/NORTH/gp' test.in sed -n 's/north/NORTH/w data' test.in sed 's/[0-9][0-9]$/&.5/' datafile &符号用在替换字符串中时,代表被替换的字符串 r: 读文件,将另外一个文件里的内容附加到指定行后 sed '$r data' test.in w: 写文件。将指定行写入到另外一个文件里 sed -n '/public/w date2' test.in n: 将指定行的以下一行读入编辑缓冲区 sed -n '/public/{n;s/north/NORTH/p}' test.in 对指定行同一时候使用多个sed编辑命令时,需用大括号括起来,命令之间用分号;隔开。 q:退出,读取到指定行之后退出sed sed '3q' test.in

(二)awk

awk能够对列进行处理
简单使用方法:
awk [options] sed_script files
    -F 指定输入记录字段的分隔符,默认环境变量IFS的值
    -f 从指定文件读取awk_script
    -v 为awk设定变量

awk -F:'{print $1}' /etc/passwd
awk -F:'/root{print $1 "|" $3}' /etc/passwd

awk的运行过程:
1. 假设存在BEGIN,awk首先运行他指定的actions
2. awk从输入中读取一行,称为一条消息记录
3. awk将读入的记录切割成数个字段,并将第一个字段放入变量$1中。第二个放入变量$2中,依次类推;$0表示整条记录。字段分隔符能够通过选项-F指定,否则使用缺省的分隔符。
4. 把当前输入记录依次与每个awk_cmd中的pattern比較:
    假设相匹配。就运行相应的actions
    假设不匹配,就跳过相应的actions,直到完毕全部的awk_cmd
5. 当一条输入记录记录完成后,awk读取输入的下一行,反复上面的处理过程。直到所有输入所有处理完成。
6. awk处理全然部的输入后,若存在END。运行对应的actions
7. 假设输入是文件列表。awk将按顺序处理列表中的每一个文件

awk处理的样例:

ifconfig | awk '/inet addr/{ print $2 }'| awk -F:'{ print $2 }'
ifconfig | awk '/inet addr/{ print $2 }'|awk -F: 'BEGIN { print "begin..."}'{ print $2 } END { print "end..." }'

另外。awk还能够处理复合表达式:

最后,awk不仅是一个命令。它更是一个编程语言
变量:
    1. 内部变量 awk '{print NR,$0}'  #给文件加上行号
    2.自己定义变量
函数:
    1.内置函数
    2.自己定义函数
    awk '{print sum($1,$2)} function sum(x,y){s=x+y;return s}' grade.txt
数组
    awk 'BEGIN {print split("123#456",arr,"#");for(i in arr){print arr[i]}}'

因为这些比較复杂,本文不再展开介绍。

最后附上几个简单的shell脚本。很多其它的实例在我的Github上。

(1)比較大小

#!/bin/bashecho "please input the two numbers:"
read a
read b
if (($a==$b));thenecho "a = b"
elif (($a>$b));thenecho "a > b"
elseecho "a < b"
fi

(2)查找文件

#!/bin/bashecho "Enter a file name :"
read a
if [ -e /home/tach/$a ];thenecho "the file is exist!"
elseecho "the file is not exist!"
fi

(3)删除大小为0的文件

#!/bin/bashfor filename in `ls`
do a=$(ls -l $filename | awk '{print $5}')if ((a==0));thenrm $filenamefi
done

(4)查看本机IP地址

#!/bin/bashifconfig | grep "inet 地址:" | awk '{print $2}' | sed 's/地址:'//g

(5)IP地址合法性推断

#!/bin/bashCheckIPAddr()
{#IP地址需由三个.分隔且均是数字echo $1 | grep "^[0-9]\{1,3\}\.\([0-9]\{1,3\}\.\)\{2\}[0-9]\{1,3\}$" > /dev/nullif [ $? -ne 0 ];thenreturn 1fiipaddr=$1a=`echo $ipaddr | awk -F. '{print $1}'`b=`echo $ipaddr | awk -F. '{print $2}'`c=`echo $ipaddr | awk -F. '{print $3}'`d=`echo $ipaddr | awk -F. '{print $4}'`for num in $a $b $c $ddoif [ $num -gt 255 -o $num -lt 0 ];thenreturn 1fidonereturn 0
}if [ $# -ne 1 ];thenecho "Usage :$0 ipaddr."exit
elseCheckIPAddr $1ans=$?if [ $ans -eq 0 ];thenecho "legal ip address."elseecho "unlegal ip address."fifi

(6)其它

#!/bin/bash#显示当前日期和时间
echo `date +%Y-%m-%d-%H:%M:%S`#查看哪个IP地址连接的最多
netstat -an | grep ESTABLISHED | awk '{print $5}'|awk -F: '{print $1}' | sort | uniq -c#awk不排序删除反复行
awk '!x[$0]++' filename
#x仅仅是一个数据參数的名字,是一个map,做指定的逻辑推断。假设逻辑推断成立,则运行指定的命令;不成立,直接跳过这一行#查看最常使用的10个unix命令
awk '{print $1}' ~/.bash_history | sort | uniq -c | sort -rn | head -n 10
#sort中的-r是降序,_-n是依照数值排序(默认比較字符,10<2)#逆序查看文件
cat 1.txt | awk '{a[i++]=$0} END {for (j=i-1; j>=0;) print a[j--] }'#查看第3到6行
awk 'NR >=3 && NR <=6' filename #crontab文件的一些演示样例
30 21 * * * /usr/local/etc/rc.d/lighttpd restart #每晚9.30重新启动apache
45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart #每月的1,10,22日的4:45重新启动apache
10 1 * * 6,0  /usr/local/etc/rc.d/lighttpd restart  #每周六、日的1:10重新启动apache
0,30 18-23 * * *  /usr/local/etc/rc.d/lighttpd restart #表示在每天18.00至23.00之间每隔30分钟重新启动apache
* 23-7/1 * * *  /usr/local/etc/rc.d/lighttpd restart #晚上11点到早上7点之间。每隔一小时重新启动apache

转载于:https://www.cnblogs.com/jzdwajue/p/7229815.html

sed amp;amp; awk工具 及一些经常使用的shell脚本相关推荐

  1. Linux运行脚本忽略警告,ShellCheck - 显示Shell脚本的警告和建议的工具

    ShellCheck是一个静态分析工具,显示有关bash / sh shell脚本中的错误代码的警告和建议. 它可以通过以下几种方式使用:通过在网络编辑器(Ace - 用JavaScript编写的独立 ...

  2. linux运维实战练习及linux shell脚本、awk、sed工具命令学习总结

    一.linux shell 脚本 1.描述shell程序的运行原理(可附带必要的图形说明): Linux系统的shell作为操纵系统的外壳,为用户提供使用操纵系统的接口.它是命令语言.命令解释程序及程 ...

  3. 正则表达式(grep命令,egrep命令,sed命令,awk命令,sort工具,uniq工具)

    文章目录 正则表达式 基础正则表达式:grep命令 查找行首"^"与行尾字符"$ 查找连续字符范围{} 元字符总结 正则表达式总结 扩展正则表达式 egrep命令 sed ...

  4. 详解Shell脚本:sed命令工具 ,awk命令工具

    -----------------------------概述----------------------------------- Linux文本处理工具(以下都是命令和工具,而且只是作为展示,不能 ...

  5. shell 知识点补充(3)-修改语系/特殊字符/ printf/sed 工具/awk 工具/diff/cmp

    1.修改语系的方法为: [root@test root]# LANG=en              (根据情况指定为其它语法,如:C) [root@test root]# export LANG l ...

  6. sed与awk工具简介 sed删除文件至文件末尾

    sed与awk工具简介 sed工具 管道命令,可以分析标准输入 ,还可以将数据进行删除替换新增选取特定行.与AWK相比,更偏向于处理行数据 命令格式 sed [-nefr][动作] nefr参数表示n ...

  7. sed awk工具 及一些常用的shell脚本

    (一)sed sed是一个精简的.非交互式的流式编辑器,它在命令行中输入编辑命令和指定文件名,然后在屏幕上查看输出. 逐行读取文件内容存储在临时缓冲区中,称为"模式空间"(patt ...

  8. linux中sed命令用例,Linux中使用sed命令或awk命令修改常规配置文件

    一.方案: Linux中使用sed命令或awk命令修改常规配置文件 二.步骤: 1.假设有一个a.txt,内容如下: #!/bin/bash aa= bbb= ccc= #ddd= 2.如果想要把里面 ...

  9. awk工具的简单使用

    简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再 ...

最新文章

  1. 【怎样写代码】向现有类型“添加”方法 -- 扩展方法(一):扩展方法概述
  2. 通过注册表开启“终端服务”
  3. 关于操作日志表的设计问题
  4. ARM汇编学习之寄存器 之PC
  5. 见证开户_见证中的发现
  6. 灵活、高效、智慧,宁畅发布新品及“智定+”战略
  7. 自定义View/ViewGroup的步骤和实现
  8. 中国好声音不如有中国好创意
  9. Capture One Pro 22 for Mac(RAW图像处理软件)
  10. 【浙大第19届校赛:B】Even Number Theory (数论n!中有多少个质因子2+java大数)
  11. arc和非arc完美支持
  12. 如何实现扫码下载app
  13. 1400+款调色预设LR/PS/PR/FCPX/达芬奇lightroom滤镜LUT素材
  14. FTP服务器FileZilla Server配置及使用方法
  15. 《SEM长尾搜索营销策略解密》一一1.4 潜藏在海平线下的长尾世界
  16. 无线桥接(副路由器连接主路由器,以实现WiFi范围扩大)
  17. 用devc++表白_【重大表白墙】19级倪yl,风吹起如花般破碎的流年,而你的笑容摇晃摇晃,成为我命途中最美的点缀...
  18. MSP432E401Y-用定时器中断控制LED闪烁
  19. 论游戏中Buff的实现
  20. 中国压电材料取得突破性进展,未来B超机可折叠弯曲

热门文章

  1. zabbix介绍及部署(超详细讲解)
  2. 100文钱买100只鸡,那 么各有公鸡、母鸡、小鸡多少只?
  3. 《MATLAB神经网络案例分析》学习(一)——BP神经网络基本理论
  4. 云渲染动画价格一般多少?
  5. Python中如何安装pip库
  6. Win 8应用开发马拉松——程序人生,共享精彩
  7. ROC曲线以及AUC值
  8. python经典:斯人若彩虹,遇上方知有
  9. 用ChatGPT直播带货!Firework发布全球首个直播购物GPT
  10. XT.COM 直播间第100期 | CRB XT.COM AMA 专场