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 ‘KaTeX parse error: Expected 'EOF', got '#' at position 18: … 文件名 #̲显示最后一行 sed -n '…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

猜你喜欢

转载自blog.csdn.net/deaidai/article/details/89949597
今日推荐