linux sed 分列,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/,如需转载,请注明出处,否则将追究法律责任。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值