Sed与Awk

sed基础用法:

sed [-nefr] [动作]

选项与参数:
-n  :使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN
      的数据一般都会被列出到萤幕上。但如果加上 -n 参数后,则只有经过
      sed 特殊处理的那一行(或者动作)才会被列出来。
-e  :直接在命令列模式上进行 sed 的动作编辑;
-f  :直接将 sed 的动作写在一个文件内, -f filename 则可以运行 filename 内的
      sed 动作;
-r  :sed 的动作支持的是延伸型正规表示法的语法。(默认是基础正规表示法语法)
-i  :直接修改读取的文件内容,而不是由萤幕输出。
动作说明:  [n1[,n2]]function
n1, n2 :不见得会存在,一般代表『选择进行动作的行数』,举例来说,如果我的动作
         是需要在 10 到 20 行之间进行的,则『 10,20[动作行为] 』
function:
a   :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c   :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d   :删除,因为是删除啊,所以 d 后面通常不接;
i   :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p   :列印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
s   :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配
      正规表示法!例如 1,20s/old/new/g 就是啦!



以行为单位的新增/删除功能

范例一:将 /etc/passwd 的内容列出并且列印行号,同时,请将第 2~5 行删除!

[[email protected] ~]# nl /etc/passwd | sed ‘2,5d‘
    1  root:x:0:0:root:/root:/bin/bash
    6  sync:x:5:0:sync:/sbin:/bin/sync
    7  shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

删除第 3 到最后一行,则是『 nl /etc/passwd | sed ‘3,$d‘ 』的啦,那个钱字号『 $ 』代表最后一行!

范例二:承上题,在第二行后(亦即是加在第三行)加上『drink tea?』字样!

[[email protected] ~]# nl /etc/passwd | sed ‘2a drink tea‘
    1  root:x:0:0:root:/root:/bin/bash
    2  bin:x:1:1:bin:/bin:/sbin/nologin
drink tea
    3  daemon:x:2:2:daemon:/sbin:/sbin/nologin

那如果是要在第二行前呢?『 nl /etc/passwd | sed ‘2i drink tea‘ 』就对啦!就是将『 a 』变成『 i 』即可。 添加一行很简单,那如果是要增将两行以上呢?

范例三:在第二行后面加入两行字,例如『Drink tea or .....』与『drink beer?』

[[email protected] ~]# nl /etc/passwd | sed ‘2a Drink tea or ......\> drink beer ?‘
    1  root:x:0:0:root:/root:/bin/bash
    2  bin:x:1:1:bin:/bin:/sbin/nologin
Drink tea or ......
drink beer ?
    3  daemon:x:2:2:daemon:/sbin:/sbin/nologin



以行为单位的取代与显示功能

范例四:我想将第2-5行的内容取代成为『No 2-5 number』呢?
[[email protected] ~]# nl /etc/passwd | sed ‘2,5c No 2-5 number‘
     1  root:x:0:0:root:/root:/bin/bash
No 2-5 number
     6  sync:x:5:0:sync:/sbin:/bin/sync

范例五:仅列出 /etc/passwd 文件内的第 5-7 行[[email protected] ~]# nl /etc/passwd | sed -n ‘5,7p‘
    5  lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    6  sync:x:5:0:sync:/sbin:/bin/sync
    7  shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown



部分数据的搜寻并取代的功能

基本上 sed 的搜寻与取代的与 vi 相当的类似!他有点像这样:

sed ‘s/要被取代的字串/新的字串/g‘

步骤一:先观察原始信息,利用 /sbin/ifconfig  查询 IP 为何?
[[email protected] ~]# /sbin/ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:90:CC:A6:34:84
          inet addr:192.168.1.100  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::290:ccff:fea6:3484/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

步骤二:利用关键字配合 grep 撷取出关键的一行数据
[[email protected] ~]# /sbin/ifconfig eth0 | grep ‘inet addr‘
          inet addr:192.168.1.100  Bcast:192.168.1.255  Mask:255.255.255.0
# 当场仅剩下一行!接下来,我们要将开始到 addr: 通通删除,就是像底下这样:
# inet addr:192.168.1.100  Bcast:192.168.1.255  Mask:255.255.255.0
# 上面的删除关键在於『 ^.*inet addr: 』啦!正规表示法出现! ^_^

步骤三:将 IP 前面的部分予以删除
[[email protected] ~]# /sbin/ifconfig eth0 | grep ‘inet addr‘ | \
> sed ‘s/^.*addr://g‘
192.168.1.100  Bcast:192.168.1.255  Mask:255.255.255.0
# 仔细与上个步骤比较一下,前面的部分不见了!接下来则是删除后续的部分,亦即: # 192.168.1.100  Bcast:192.168.1.255  Mask:255.255.255.0
# 此时所需的正规表示法为:『 Bcast.*$ 』就是啦!

步骤四:将 IP 后面的部分予以删除
[[email protected] ~]# /sbin/ifconfig eth0 | grep ‘inet addr‘ | \
> sed ‘s/^.*addr://g‘ | sed ‘s/Bcast.*$//g‘
192.168.1.100

步骤一:先使用 grep 将关键字 MAN 所在行取出来
[[email protected] ~]# cat /etc/man.config | grep ‘MAN‘
# when MANPATH contains an empty substring), to find out where the cat
# MANBIN                pathname
# MANPATH               manpath_element [corresponding_catdir]
# MANPATH_MAP           path_element    manpath_element
# MANBIN                /usr/local/bin/man
# Every automatically generated MANPATH includes these fields
MANPATH /usr/man

步骤二:删除掉注解之后的数据!
[[email protected] ~]# cat /etc/man.config | grep ‘MAN‘| sed ‘s/#.*$//g‘

MANPATH /usr/man
[[email protected] ~]# cat /etc/man.config | grep ‘MAN‘| sed ‘s/#.*$//g‘ | \
> sed ‘/^$/d‘
MANPATH /usr/man
MANPATH /usr/share/man
MANPATH /usr/local/man



直接修改文件内容(危险动作)

范例六:利用 sed 将 regular_express.txt 内每一行结尾若为 . 则换成 !

[[email protected] ~]# sed -i ‘s/\.$/\!/g‘ regular_express.txt

# 上头的 -i 选项可以让你的 sed 直接去修改后面接的文件内容而不是由萤幕输出喔!
# 这个范例是用在取代!请您自行 cat 该文件去查阅结果罗!

范例七:利用 sed 直接在 regular_express.txt 最后一行加入『# This is a test』

[[email protected] ~]# sed -i ‘$a # This is a test‘ regular_express.txt

# 由於 $ 代表的是最后一行,而 a 的动作是新增,因此该文件最后新增罗!
举例来说,如果你有一个 100 万行的文件,你要在第 100 行加某些文字,此时使用 vim 可能会疯掉!因为文件太大了!那怎办?就利用 sed 啊!

Sed与Awk

时间: 2024-10-06 13:49:25

Sed与Awk的相关文章

sed和awk之awk篇

(原创文章,谢绝转载~) awk是处理文本的另一利器,也是对文本逐行处理.awk的基本syntax是: awk 'pattern {action} ' inputfile #examples awk '/regex/ { print $0 }' inputfile 在awk中用 $1,$2,$3.... 表示每行的第1,2,3....列,而 $0 表示整行数据 另有内置变量,借助awk的这些内置变量,可以非常方便的处理文本: NF ,列数(Number of Fileds),进而 $NF 为最后

Shell脚本编程与sed,awk工具的使用--9月15日课程作业

一.shell程序的运行原理 1.脚本 脚本或程序源文件是一种文本文件,将文本文件转换成机器指令有两种转换方式: 编译执行:预处理-->编译-->汇编-->链接:事先完成,结果:二进制程序文件 例如:C, C++ 解释执行:由解释器全程参与运行过程,每次读取一行,运行一行: 例如:  Python:程序控制结构,调用编程库完成程序编写: 库文件:功能模块,在编程中可调用: Bash:调用机器上命令程序文件进行程序编写: 外部命令:各应用程序提供: 2.原理 当shell运行一个程序时,会

日志分析查看——grep,sed,sort,awk运用

概述 我们日常应用中都离不开日志.可以说日志是我们在排查问题的一个重要依据.但是日志并不是写了就好了,当你想查看日志的时候,你会发现线上日志堆积的长度已经超越了你一行行浏览的耐性的极限了.于是,很有必要通过一些手段来高效地辅助你来快速的从日志中找到你要找的问题.本文通过一个从项目中衍生出来的例子从查找日志,筛选日志和统计日志3个方面层层递进来简述日志文件查看中一些有用的手段.(注:在linux环境下) 目录 0.查找关键日志grep 1.查找关键日志grep 2.精简日志内容 sed 3.对记录

第14章 grep、sed、awk 正则表达式

1. 如何把 /etc/passwd 中用户uid 大于500 的行给打印出来?   awk -F ':' '$3>500' /etc/passwd2. awk中 NR,NF两个变量表示什么含义?awk -F ':' '{print $NR}' /etc/passwd  会打印出什么结果出来?    NR 表示行 : NF表示列 awk -F ':' '{print $NR}' /etc/passwd   会依次打印对应的行数的段,第一行打印第一段,第二行打印第二段... 到了最后就打印空行了 

linux(5)--补充(管道| / 重定向> / xargs)/find 与xargs结合使用/vi,grep,sed,awk(支持正则表达式的工具程序)

本节中正则表达式的工具程序 grep,sed和awk是重点,也是难点!!! 先补充一下一. 管道| / 重定向> / xargs 如:1. 管道和重定向的区别:具体可以见 http://www.cnblogs.com/chengmo/archive/2010/10/21/1856577.html以此为例: cat test.sh test1.sh 2>/dev/null | grep -n 'echo' 此时若test.sh 不存在,报错信息不会输出到屏幕中,而是转入 /dev/null中,如

正则、grep、sed、awk

每次用到正则都要蛋疼一下,索性总结一下在这里. 正则 正则表达式主要分为基础正则和扩展正则.注意,正则和一般命令行输入的命令的通配符不同.正则只使用于支持这种表示法的工具,如:vi,grep,sed.awk.而ls等命令不支持这种表示,只能使用bash自身的通配符. 基础部分: [abc] 匹配括号中的一个 [^abc] 匹配非括号中的一个(取反) ^word 以word开头 word$ 以word结尾 [n1-n2] 从n1到n2之间的所有连续字符. 注意:这个连续与否,与ASCII编码有关,

grep、sed、awk

正则表达式使用单个字符串来描述.匹配一系列符合某个句法规则的字符串.在很多文本编辑器里,正则表达式通常被用来检索.替换那些符合某个模式的文本. 正则表达式由一些普通字符和一些元字符(metacharacters)组成. 检索工具:grep grep [-cinvABC] 'word' filename:根据关键字或正则表达式在文件中查找匹配的行 -c:显示匹配行数 -i:不区分大小写 -n:显示行号 -v:显示不匹配的行 -An:连匹配行的下面n行一起显示 -Bn:连匹配行的上面n行一起显示 -

bash sed和awk

随着科技的发展,软硬件的不断更新.人们通过计算机逐渐从重复性劳动工作中解脱出来,那么计算机如何通过程序执行命令来实现我们预先设定好的步骤呢,请看下图: 一.我们知道计算机由硬件和软件组成.而软件又分为系统内核跟应用程序:当用户查看一条信息,或者编译一个程序指令,那么他的交互就由计算机通过系统内核调用程序接口,执行单一或者单一指令组成的复杂的程序组成,执行完后,又通过程序接口返回到内核通过输入输出设备呈现在大家面前. 二.程序接口按照他们的语法和编译方式将程序汇编或者调用成系统内核可以识别的指令进

shell之三大文本处理工具grep、sed及awk

grep.sed和awk都是文本处理工具,虽然都是文本处理工具单却都有各自的优缺点,一种文本处理命令是不能被另一个完全替换的,否则也不会出现三个文本处理命令了.只不过,相比较而言,sed和awk功能更强大而已,且已独立成一种语言来介绍. grep:文本过滤器,如果仅仅是过滤文本,可使用grep,其效率要比其他的高很多: sed:Stream EDitor,流编辑器,默认只处理模式空间,不处理原数据,如果你处理的数据是针对行进行处理的,可以使用sed: awk:报告生成器,格式化以后显示.如果对处

Linux Shell之十 sed与awk

设计script时,有时候需要修改脚本,例如删除或置换某些关键词.像这种在script执行过程动态修改文件的做法,称为流编辑.具有流编辑能力的工具,称为流编辑器.sed是这方面的强者.另外script执行时可能要制作报表,呈现各字段信息,awk完美解决. 一.正则表达式 正则表达式是组成"样式"的基本语法,而"样式"是运用sed和awk必备的能力.sed和awk相同的运行方式是:只要符合"样式"的数据行,就对它执行指定的"操作"