grep、sed、awk、head、tail、gsub、sub

Awk、sed与grep,俗称Linux下的三剑客,它们之前有很多相似点,但是同样也各有各的特色,相似的地方是它们都可以匹配文本,其中sed和awk还可以用于文本编辑,而grep则不具备这个功用。

grep搜索
sed 修改和编辑文本文件中某些行
awk 是访问文本文件,操纵文本文件中某些数据


三者都不能后面直接接文件名
grep 文件名
sed 文件名
awk文件名

只有如下才行,才会显示内容
grep 关键字  文件名
sed -n '行数p' 文件名
awk '{print}' 文件名



grep -n表示把结果展示出来后,给每一行加上行号
grep -A表示Print  NUM  lines of trailing context after matching lines显示匹配内容和它的后几行
grep -B表示Print  NUM  lines of leading context before matching lines显示匹配内容和它的前几行



sed -n表示指定的行才会被列出来。在一般 sed 的用法中,所有来自文件的内容都会被列出到屏幕上。
sed -n '1p' 文件名           #显示第一行 
sed -n '$p' 文件名           #显示最后一行
sed -n '1,2p' 文件名        #显示第一行到第二行
sed -n '2,$p' 文件名        #显示第二行到最后一行



awk -F表示以什么分隔每行的内容
awk -F ","   #表示,逗号分隔
awk -F ";"   #表示;分号分隔


awk和{print}在一起表示显示哪些列,或统计多少列,必须加{},大括号里面的最后可以有;也可以没有,没有什么影响
awk -F "," '{print $0}'   #表示,逗号分隔后,显示所有列$0  is the whole record
awk -F "," '{print $1}'   #表示,逗号分隔后,显示第1列
awk -F "," '{print $3}'   #表示,逗号分隔后,显示第3列
awk -F "," '{print NF}'   #表示,逗号分隔后,这一行总共有多少列




以下两者没有区别,显示所有内容
awk '{print}' 文件名
awk '{print;}' 文件名



head、tail后面可以直接接文件名,表示显示全部内容
head 文件名     #显示文件所有内容
head -1 文件名  #显示文件第1行内容
head -2 文件名  #显示文件最前面2行内容(不是只显示第2行)


tail 文件名     #显示文件所有内容
tial -1 文件名  #显示文件最后1行内容
tial -2 文件名  #显示文件最后2行内容(不是只显示倒数第2行)









awk经常和gsub、sub一起使用,作用就是使用它们替换文件中的内容
sub表示把行里某列的内容只替换第一个
gsbu表示把行里某列的内容都替换掉


一般格式为
awk  'sub(/A/,"B")'  #表示文件不分列,所有行中的第一个A全部替换为B
awk -F "分隔符"  'sub(/A/,"B",$N)'  #表示文件分列,第N列中的第一个A替换为B

awk  'gsub(/A/,"B")'  #表示文件不分列,所有行中A的全部替换为B
awk -F "分隔符"  'gsub(/A/,"B",$N)'  #表示文件分列,第N列中A的全部替换为B


实验如下
[oradbm@plmdba script]$ cat 12
a-1, b, c, 2011-11-22, a:d
b-1, b, c, 2011-11-22, a:d
c-1, b, c, 2011-11-22, a:d
d-1, b, c, 2011-11-22, a:d


gsub发现每一行中的所有-都替换掉了(不分列的情况)
[oradbm@plmdba script]$ cat 12 | awk  'gsub(/-/,"")'
a1, b, c, 20111122, a:d
b1, b, c, 20111122, a:d
c1, b, c, 20111122, a:d
d1, b, c, 20111122, a:d


sub发现每一行中只有第一次出现的-被替换掉了(不分列的情况)
[oradbm@plmdba script]$ cat 12 | awk  'sub(/-/,"")'
a1, b, c, 2011-11-22, a:d
b1, b, c, 2011-11-22, a:d
c1, b, c, 2011-11-22, a:d
d1, b, c, 2011-11-22, a:d


gsub发现第4列所有-都替换掉了(分列的情况)
[oradbm@plmdba script]$ cat 12 | awk -F "," 'gsub(/-/,"",$4)'
a-1  b  c  20111122  a:d
b-1  b  c  20111122  a:d
c-1  b  c  20111122  a:d
d-1  b  c  20111122  a:d


sub发现第4列只有第一次出现的-被替换掉了(分列的情况)
[oradbm@plmdba script]$ cat 12 | awk -F "," 'sub(/-/,"",$4)'
a-1  b  c  201111-22  a:d
b-1  b  c  201111-22  a:d
c-1  b  c  201111-22  a:d
d-1  b  c  201111-22  a:d

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30126024/viewspace-2125311/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/30126024/viewspace-2125311/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值