常用命令学习(四)

文本操作:awk,grep,sed,paste,cat,diff,wc,vi

last

用于显示用户最近登录信息。单独执行last命令,它会读取/var/log/wtmp的文件,并把该给文件的内容记录的登入系统的用户名单全部显示出来。

/etc/passwd配置文件存放用户名、home目录、默认执行脚本程序等。

cat/etc/passwd显示文件内容,将输出结果通过管道传递给cut命令。

awk

awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。

命令行方式调用awk

awk[-F field-separator] ‘commands’ input-file(s)

其中,commands是真正awk命令,[-F域分隔符]是可选的。 input-file(s) 是待处理的文件。 在awk中,文件的每一行中,由域分隔符分开的每一项称为一个域。通常,在不指名-F域分隔符的情况下,默认的域分隔符是空格。

awk工作流程是这样的:读入有’\n’换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,0则表示所有域,1表示第一个域,n表示第n个域。默认域分隔符是"空白键"或"[tab]键",所以$1表示登录用户,$3表示登录用户ip,以此类推。

awk工作流程是这样的:先执行BEGING,然后读取文件,读入有\n换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,0则表示所有域,$1表示第一个域,$n表示第n个域,随后开始执行模式所对应的动作action。接着开始读入第二条记录······直到所有的记录都读完,最后执行END操作。

总结一下awk的使用格式,分为四个部分,之间用空格分开:

awk[-F field-separator] ‘{pattern + action}’input-file(s)

-F ':'和-F:':'是一样的。-F:和没有是一样的。

搜索/etc/passwd有root关键字的所有行

$awk -F:'/root/' /etc/passwd说明支持正则表达式

root:x:0:0:root:/root:/bin/bash

$ awk'/^root/' /etc/passwd说明支持正则表达式

root:x:0:0:root:/root:/bin/bash

这种是pattern的使用示例,匹配了pattern(这里是root)的行才会执行action(没有指定action,默认输出每行的内容)。

搜索/etc/passwd有root关键字的所有行,并显示对应的shell

$ awk -F:'/root/' /etc/passwd说明pattern 和 action可以一起用

/bin/bash

grep

常用格式为:grep [选项] ”模式“ [文件],单引号双引号无都可以。

grep家族总共有三个:grep,egrep,fgrep。

[选项]主要包括:

-c:只输出匹配行的计数。

-i:不区分大小写(只适用于单字符)。

-h:查询多文件时不显示文件名。

-l:查询多文件时只输出包含匹配字符的文件名。

-n:显示匹配行及行号。

-s:不显示不存在或无匹配文本的错误信息。

-v:显示不包含匹配文本的所有行。

pattern正则表达式主要参数:

\: 忽略正则表达式中特殊字符的原有含义。

^:匹配正则表达式的开始行。

$: 匹配正则表达式的结束行。

\

\>:到匹配正则表达式的行结束。

[ ]:单个字符,如[A]即A符合要求。

[ -]:范围,如[A-Z],即A、B、C一直到Z都符合要求 。

.:所有的单个字符。

*:有字符,长度可以为0。

grep ‘test’d*

显示所有以d开头的文件中包含 test的行。

grep ‘test’aa bb cc

显示在aa,bb,cc文件中匹配test的行。

grep‘[a-z]\’ aa(这里的正则表达式\和perl不同)

显示所有包含每个字符串至少有5个连续小写字符的字符串的行。

grep '^a'test.txt搜索以a开头的

linux的grep命令,解释一下perl正则表达式在这里怎么用?

grep -P 'perl正则表达式'files如:

$ grep -P'abc|okm' test1.txt

abc

okm

注意:‘ ’就是左右边界符

sed

http://www.jb51.net/article/111306.htm

删除行

地址范围:m,n表示第m行到第n行;m,$ 表示对m行以及其后面的所有行。可以结合正则表达式。d表示删除。注意:sed不会改变原文件。

新增行

在后面添加行

在前面添加行

替换行

替换部分字符串而不是整行

$ sed's/aa/AA/' test2.txt将行中第一个aa->AA

$ sed's/aa/AA/g' test2.txt将行中每一个aa->AA,g表示全局替换

同样可以使用地址限定,如:$ sed '6,7s/aa/AA/g' test2.txt

也支持使用正则表达式限定符合条件的行,如:$ sed '/^[0-9]/s/aa/AA/g' test2.txt

搜索并输出行内容

加上 -n 选项让sed仅仅是输出经过处理之后的那些行

$ sed -n '2p'test2.txt

22 bb

将修改应用到文件中

区别与之前没有改变原文件的内容,我们可以使用 -i 选项告诉sed直接修改文件的内容,而不是将修改结果输出到终端上。如:

$ sed -i '2,3d'test2.txt

$ cat test2.txt

11 aa

23 dd

55 2e

66 AAff ccaa

66 aaff ccaa

sed中常用的正则元字符

sed中正则的语法可能与其他命令的正则语法有一些不同

$表示行尾

^表示行首

[a-z0-9]表示字符范围

[^]表示除了字符集中的字符以外的字符

sed的正则中 \(\) 和 \ 需要转义

.表示任意字符

*表示零个或者多个

\+一次或多次

\?零次或一次

\|表示或语法

paste

paste可以简单的理解为把两个文件的内容按列合并,与cat命令直接将不同文件按照先后顺序接起来不同,paste可以非常快速的将两个文件中的内容按照文件顺序从左往右排起来。

拼接时使用指定符号隔开各个文件的内容:paste -d':' file1 file2,-d之后使用双引号和单引号甚至不用引号的结果一样,而且只能指定一个字符。

删除所有换行符:paste file1 -s,paste file1 file2 -s,paste file1 -s -d:

指定从标准输入中读取的次数:

用空格隔开,一次读三个,完了换行继续读。

cat

1.仅查看文件内容:$ cat file1

2.与grep连用来查找文件中的内容(直接用grep也可以做到):

$cat file1 | grep "b"

3.创建文件

$cat > file4

……

没文件创建文件;有文件先清空再写。

4.清空文件内容

$cat > file4

5.向文件的尾部写入内容

$ cat >> file4

6.注意:有些时候可能会利用cat命令生成一些Shell 脚本文件。这个时候如果直接写符号,有可能被认为是调用变量,导致无法写入文件。答案是需要在符号前面加 \ 。

diff

在最简单的情况下,比较给定的两个文件的不同。如果使用“-”代替“文件”参数,则要比较的内容将来自标准输入。diff命令是以逐行的方式,比较文本文件的异同处。如果该命令指定进行目录的比较,则将会比较该目录中具有相同文件名的文件,而不会对其子目录文件进行任何比较操作。

语法:diff [options] FILES

FILES的格式:FILE1FILE2;DIR1 DIR2; FILE DIR; DIR FILE

1.比较两个文件

$ diff txt3txt4

3c3

---

8c8

---

10a11,12

a -add

c - change

d - delete

2.并排格式输出

$ diff txt3txt4 -y -W 50

2013-01 2013-01

2013-02 2013-02

2013-03 | 2014-03

2013-04 2013-04

2013-05 2013-05

2013-06 2013-06

2013-07 2013-07

2013-08 | 2013-07

2013-09 2013-09

2013-10 2013-10

“|”表示前后2个文件内容有不同

“>”表示后面文件比前面文件多了1行内容

wc

该命令统计指定文件中的字节数、字数、行数。如果没有给出文件名,则从标准输入读取。wc同时也给出所指定文件的总统计数。

格式:wc [选项]文件...

-c统计字节数。

-l统计行数。

-m统计字符数。这个标志不能与 -c 标志一起使用。

-w统计字数。一个字被定义为由空白、跳格或换行字符分隔的字符串。

-L打印最长行的长度。

vi

vim编辑器是系统自带的文本编辑器,按"i”,切换到“插入”状态。

关于退出:ESC+ 冒号(:)+ 命令 + 回车

wq ——保存退出

q ——正常退出(在内容上没有被改动过)

q! ——不保存退出

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180301G01OMZ00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券