sed awk grep

Sed和AWK是都是面向行的,或者说它们处理文本的方式都是一行接着一行的处理,从标准输入或者文件中读取内容,一行一行的执行脚本命令,然后打印输出到标准输出,直到文件结尾(EOF).。

Sed: 用于修改文件内容

Sed是一个流编辑器(Stream editor),它的功能在于对于一个输入流进行编辑和处理。相当于是对一个输入流进行脚本性的ed(编辑)。

用s命令替换

$cat test.txt

This is my cat my

mycat's name is betty my

This is my dog

my dog's name is frank

把其中的my字符串替换成 tammy’s,/g 表示一行上的替换所有的匹配)

$sed "s/my/tammy's/" test.txt

单引号无法通过\’这样来转义,双引号可以用\”来转义。

可直接重定向到文件或使用- i 参数直接对文件进行修改。

在每一行最前面加点东西:

$sed 's/^/XXX/g' pets.txt

在每一行最后面加点东西:s

$sed 's/$/XXX/g' pets.txt

下面的命令只替换第3到第6行的文本。

$sed "3,6s/my/your/g" pets.txt

只替换每一行的第一个s:

$sed 's/s/S/1' my.txt

只替换每一行的第二个s:

$sed 's/s/S/2' my.txt

只替换第一行的第3个以后的s:

$sed 's/s/S/3g' my.txt

顺手介绍一下正则表达式的一些最基本的东西:

^表示一行的开头。如:/^#/ 以#开头的匹配。

$表示一行的结尾。如:/}$/ 以}结尾的匹配。

\<表示词首。 如:\

\>表示词尾。 如:abc\>表示以 abc 結尾的詞。

.表示任何单个字符。

*表示某个字符出现了0次或多次。

[ ]字符集合。 如:[abc]表示匹配a或b或c,还有[a-zA-Z]表示匹配所有的26个字符。如果其中有^表示反,如[^a]表示非a的字符

多个匹配

$sed '1,3s/my/your/g; 3,$s/This/That/g' my.txt

等价于 sed-e '1,3s/my/your/g' -e '3,$s/This/That/g' my.txt

我们可以使用&来当做被匹配的变量,然后可以在基本左右加点东西。

$sed's/my/[&]/g'my.txt

This is [my]cat, [my]cat's name is betty

a命令和i命令

a命令就是append, i命令就是insert,它们是用来添加行的。如:

#其中的1i表明,其要在第1行前插入一行(insert)

$sed"1 i This is my monkey, my monkey's name is wukong"my.txt

# 其中的1a表明,其要在最后一行后追加一行(append)

$sed"$ a This is my monkey, my monkey's name is wukong"my.txt

c命令

c 命令是替换匹配行

$sed"2 c This is my monkey, my monkey's name is wukong"my.txt

d命令

删除匹配行

$sed'2d'my.txt

去除空白行

sed'/^$/d'file

awk

awk工作流程:读入有‘\n’ 换行符分割的一条记录,然后将记录按指定的与分隔符划分域,填充域,$0则表示所有域,$1则表示第一个域,$n则表示第n个域。默认域分隔符是空白键或tab键

last -n 5  仅取出前五行

sed awk grep_第1张图片

仅输出第一列

last -n 5 | awk '{print $1}'

#cat /etc/passwd |awk  -F ':'  '{print $3}'

-F指定域分隔符,为‘:’

同时显示两列

#cat /etc/passwd | awk -F ':'  '{print $1"\t"$7}'

\t 表示tab键

cat /etc/passwd | awk-F':''BEGIN {print "name,shell"}  {print $1","$7} END {print "blue,/bin/nosh"}'

sed awk grep_第2张图片

grep 打印匹配文本行

grep ‘字符串’ 文件名:显示文件中带有字符串的行

grep ‘字符串’ d*:显示以字母d为开头的文件中带有字符串的行

cat a.txt | grep AAA | grep -v BBB | wc - l

查找a.txt中包含AAA,但不包含BBB的文件的总数

你可能感兴趣的:(sed awk grep)