Linux文件操作四剑客

目录

一、grep

(一)作用

(二)格式

(三)选项

(四)案例

1、查看/etc目录下所有包含bash的文件名:grep   -rl  bash   /etc

2、查看/var/log目录下所有包含error的文件名:grep  -rl   error  /var/log

(五)egrep(完美支持正则表达式)

(六)正则表达式

1、基础正则

2、扩展正则

(七)常见正则表达式

1、数字

2、字符串

3、Email

4、Url

5、IP

6、Tel

7、日期校验

二、find

(一)作用

(二)格式

(三)选项

1、-name            按照文件名查找

2、-size               按照文件大小查找

3、-type            按照文件类型查找

4、按照时间查找

5、按照文件归属查找

6、-perm           按照权限查找

7、-exec                用于在找到的每个文件上执行一个命令。

8、xargs命令用于从标准输入中读取字符串,并将其作为命令行参数传递给指定的命令。

      xargs命令可以同时处理多个文件,因此比使用-exec选项的方式效率更高。

9、当前目录及子目录下查找所有以.txt和.pdf结尾的文件

10、找出/home下不是以.txt结尾的文件

11、找出比file.log修改时间更长的所有文件

12、删除当前目录下所有.txt文件

三、sed

(一)语法

(二)选项

(三)操作

(四)案例

1、输出符合条件的文本:

2.删除符合条件的文本

3.替换符合条件的文本

4.迁移符合条件的文本

5.使用脚本编辑文件内容

6.以上修改想要直接修改文本源文件,只需要加入选项"-i"

四、awk

(一)语法

(二)选项

(三)内建变量

(四)案例

1、按行输出

2、按段输出

3、调用shell命令


一、grep

(一)作用

打印匹配指定字符串的行

(二)格式

grep  [选项]  [字符串]  文件名

(三)选项

1、-n            显示行号

2、-i            忽略大小写

3、-q            静默模式

4、-o            只显示查找的字符串

5、-v            反向匹配

6、^字符串    匹配以字符串开头的行

7、字符串$        匹配以字符串结尾的行

8、^$                匹配空行

9、-A #          查看所在行的后#行 

10、-B #          查看所在行的前#行

11、-C #          查看所在行的前后#行

12、-r                递归扫描指定目录下的每一个文件

13、-l                只显示匹配到指定关键字的文件名,而不是文件内容

(四)案例

1、查看/etc目录下所有包含bash的文件名:grep   -rl  bash   /etc

2、查看/var/log目录下所有包含error的文件名:grep  -rl   error  /var/log

(五)egrep(完美支持正则表达式)

(六)正则表达式

1、基础正则

①查找特定字符

命令:cat test.txt | grep -n 'was'

②利用[]查找集合字符

命令:cat test.txt | grep -n 'sh[io]rt'                 匹配i或者o

           cat test.txt | grep -n '[^w]'                     排除w,但以w开头的单词还会匹配到

           cat test.txt | grep -n '[a-h]oo'

           cat test.txt | grep -n '[0-9]'

③查找行首"^"与行尾"$"

命令:cat test.txt | grep -n '^[A-Z]'

           cat test.txt | grep '\.$'                 \为转义符

④查找任意一个字符"."与重复字符"*"

 命令:cat test.txt | grep -n 'w..d'                'w..d' 会匹配以 w 开始,以 d 结尾,中间有且仅有两个任意字符的字符串。

            cat test.txt | grep -n 'ooo*'                *表示前一个字符为0个或多个时满足条件

 在正则表达式中,  . 表示匹配除换行符之外的任何一个字符,而 .. 表示匹配任意两个字符

⑤查找连续的字符范围"{}",需要使用转义符,"\{\}"

命令:cat test.txt | grep -n 'o\{2\}'

           cat test.txt | grep -n 'wo\{2,5\}d'

            cat test.txt | grep -n 'wo\{2,\}d

\{n,m\} 表示匹配前面的字符至少出现 n 次,最多出现 m 次,其中 n 和 m 都是整数,可以省略不写

\{n\} 表示匹配前面的字符恰好出现 n 次

2、扩展正则

①+,重复一个或一个以上的前一个字符

命令:cat test.txt | grep -nE 'wo+d' 或者cat test.txt | egrep -n 'wo+d'

②?,零个或者一个前一个字符

命令:cat test.txt | egrep -n 'bes?t'

③|,使用或者的方式找出多个字符

命令:cat test.txt | egrep -n 'of|is|on'

④(),查找组字符串

命令:cat test.txt | egrep -n 't(a|e)st'

⑤()+,辨别多个重复的组

命令:cat test.txt | egrep -n 'A(xyz)+C'

(七)常见正则表达式

1、数字

①“^[0-9]*[1-9][0-9]*$”           //正整数 

②“^((-\d+)|(0+))$”                 //非正整数(负整数 + 0) 

③“^-[0-9]*[1-9][0-9]*$”         //负整数 

④“^-?\d+$”                          //整数

⑤“^\d+(\.\d+)?$”                 //非负浮点数(正浮点数 + 0) 

⑥“^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$”                 //正浮点数

⑦“^((-\d+(\.\d+)?)|(0+(\.0+)?))$”                 //非正浮点数(负浮点数 + 0)

⑧“^(-?\d+)(\.\d+)?$”                 //浮点数

2、字符串

①“^[A-Z]+$”                 //由26个英文字母的大写组成的字符串 

②“^[a-z]+$”                 //由26个英文字母的小写组成的字符串 

③“^[A-Za-z0-9]+$”         //由数字和26个英文字母组成的字符串 

④“^\w+$”                      //由数字、26个英文字母或者下划线组成的字符串

3、Email

①“^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$”         //email地址 

②“^([w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$”                                   //Email

4、Url

“^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$”                 //url

5、IP

“^(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5])$”   //IP地址

6、Tel

/^((\+?[0-9]{2,4}\-[0-9]{3,4}\-)|([0-9]{3,4}\-))?([0-9]{7,8})(\-[0-9]+)?$/     //电话号码

7、日期校验

①   /^(d{2}|d{4})-((0([1-9]{1}))|(1[1|2]))-(([0-2]([1-9]{1}))|(3[0|1]))$/                   //  年-月-日    yyyy-MM-dd / yy-MM-dd 格式

②   "^[0-9]{4}-((0([1-9]{1}))|(1[1|2]))-(([0-2]([0-9]{1}))|(3[0|1]))$"                   // 年-月- 日  yyyy-MM-dd 格式

③  /^((0([1-9]{1}))|(1[1|2]))/(([0-2]([1-9]{1}))|(3[0|1]))/(d{2}|d{4})$/                   // 月/日/年

二、find

(一)作用

递归的在目录中查找文件

(二)格式

find  查找范围   选项   条件

(三)选项

1、-name            按照文件名查找

2、-size               按照文件大小查找

①+  数值        表示大于

②-  数值        表示小于

3、-type            按照文件类型查找

①f            普通文件

②s            套接字文件

③b            块设备文件

④c            字符设备文件

⑤p            管道文件

⑥l            链接文件

⑦d            目录

4、按照时间查找

①atime             文件访问时间

②mtime            文件内容修改时间

③ctime             文件状态修改时间

使用stat  文件名查看文件的时间戳

5、按照文件归属查找

①-user            按照属主查找

②-group            按照属组查找

6、-perm           按照权限查找

举例:find   /etc/       -perm    600

          find   /etc/    -user    root    -perm    600

7、-exec                用于在找到的每个文件上执行一个命令。

举例:find /var/spool/mail -type f -exec rm -rf {} \;

表示将在/var/spool/mail目录下查找所有类型为文件的对象,并删除它们,从而清空该目录

rm -rf {}表示要删除找到的文件或目录        {}表示当前查到的文件名        \;表示执行结束并退出

8、xargs命令用于从标准输入中读取字符串,并将其作为命令行参数传递给指定的命令。

      xargs命令可以同时处理多个文件,因此比使用-exec选项的方式效率更高。

举例:find /var/spool/mail -type  f | xargs rm -rf

将在/var/spool/mail目录下查找所有类型为文件的对象,并将它们作为参数传递给rm -rf命令,以删除这些文件。

9、当前目录及子目录下查找所有以.txt和.pdf结尾的文件

方法一:find . \( -name "*.txt" -o -name "*.pdf" \)
方法二:find . -name "*.txt" -o -name "*.pdf"

10、找出/home下不是以.txt结尾的文件

命令:find /home ! -name "*.txt"

11、找出比file.log修改时间更长的所有文件

命令:find . -type f -newer file.log

12、删除当前目录下所有.txt文件

命令:find . -type f -name "*.txt" -delete

三、sed

(一)语法

sed [选项] '操作' 参数

sed [选项] -f scriptfile 参数

(二)选项

①-e:表示用指定命令或脚本处理

②-f:指定脚本文件

③-h:帮助

④-n:表示仅显示处理后的结果

⑤-i:直接编辑文本文件

⑥-r:支持扩展正则

(三)操作

1、a:增加,在当前行下面以行增加指定内容

2、c:替换,将选定行替换

3、d:删除,删除指定行

举例:

①删除空白行                                  sed '/^$/d' file
②删除文件的第2行                         sed '2d' file
③删除文件的第2行到末尾所有行    sed '2,$d' file
④删除文件最后一行                         sed '$d' file
⑤删除文件中所有开头是test的行     sed '/^test/'d file

4、i:插入,在选定行的上面插入一行

5、p:打印

举例:

所有在模板test和check所确定的范围内的行都被打印                  sed -n '/test/,/check/p' file
打印从第5行开始到第一个包含以test开始的行之间的所有行        sed -n '5,/^test/p' file
对于模板test和west之间的行,每行的末尾用字符串aaa bbb替换  sed '/test/,/west/s/$/aaa bbb/' file

6、s:替换,替换指定字符

7、y:字符转换

(四)案例

1、输出符合条件的文本:

①sed -n 'p' test.txt     #相当于cat

②sed -n '3p' test.txt    #打印第3行

③sed -n ‘/w/p' test.txt      #打印所有包含字符"w"的行

④sed -rn '/wo+/p' test.txt    #打印所有包含字符"wo"后面跟随一个或多个字符"o"的行

⑤sed -n '3,6p' test.txt    #打印第3到6行的内容

⑥sed -n 'p;n' test.txt    #打印奇数行

⑦sed -n 'n;p' test.txt    #打印偶数行

⑧sed -n '1,6{p;n}' test.txt    #打印1到6行之间的奇数行

⑨sed -n '5,${p;n}' test.txt    #从第5行开始打印奇数行

⑩sed -n '/the/p' test.txt    #匹配the

sed -n '5,/the/p' test.txt     #匹配从第5行开始到包含the的行

sed -n '/the/,10p' test.txt     #匹配从包含the的行到第10行结束

sed -n '/the/=' test.txt    #打印包含the的行号        =命令用于在行的前面输出行号

2.删除符合条件的文本

①nl test.txt | sed '3d'    #删除第3行

②nl test.txt | sed '3,5d'

③nl test.txt | sed '/the/d'    #删除the所在行

④nl命令可以将文本文件的内容加上行号,并将处理后的结果输出到终端窗口。

3.替换符合条件的文本

①nl test.txt | sed 's/the/TTTTTT/'    #替换全文本

②nl test.txt | sed '4s/the/TTTTTT/'    #替换第4行

③nl test.txt | sed 's/l/L/2'        #替换匹配到的第2个l

4.迁移符合条件的文本

H:复制;g:覆盖;G:追加行;w:保存;r:读取;a:追加内容

①sed '/the/{H;d};$G' test.txt #匹配the所在行并迁移至文件末尾

②sed '3aTest' test.txt #在第3行下面新建行并写入Test

③sed '/the/aTest' test.txt #匹配the所在行并在下一行写入Test

5.使用脚本编辑文件内容

vim opt.txt

1,5H
1,5d
16G
sed -f opt.txt test.txt    #将1到5行迁移至16行后

6.以上修改想要直接修改文本源文件,只需要加入选项"-i"

四、awk

(一)语法

awk 选项 '模式或条件{编辑命令}' 文件1 文件2 ...

awk -f 脚本文件 文件1 文件2 ...

(二)选项

1、-F        指定每行的分隔符

2、默认分隔符为空格

(三)内建变量

①FS:指定每行的分隔符

②NF:指定当前处理行的字段个数

③NR:当前处理行的行号

④$0:当前处理行的整行内容

⑤$n:当前处理的第n个字段

⑥FILENAME:处理文件名

⑦RS:数据记录分隔,默认是\n

(四)案例

1、按行输出

①awk '{print}' /etc/passwd          #等同cat

②awk 'NR==1{print}' /etc/passwd #打印第1行

③awk 'NR>=1&&NR<=3{print}' /etc/passwd    #打印前3行

④awk 'NR==1,NR==3{print}' /etc/passwd #打印1到3行

⑤awk 'NR%2==0{print}' /etc/passwd     #打印偶数行

⑥awk 'NR%2!=0{print}' /etc/passwd     #打印奇数行

2、按段输出

①ifconfig ens33 |awk '/netmask/{print $2}'     #筛选IP地址

②#筛选用户信息文件第一行的前三段

awk -F : 'NR==1{print $1 $2 $3}'  /etc/passwd

awk -F : 'NR==1{print $1,$2,$3}'  /etc/passwd  

awk -F : 'NR==1{print $1"|"$2"|"$3}'  /etc/passwd

Linux文件操作四剑客_第1张图片

③cat /etc/shadow | awk -F : '$2=="!!"{print $1}'     #打印不能登录系统的用户       !!表示用户无密码

3、调用shell命令

统计能够登录系统的用户个数   

cat /etc/passwd | awk -F : '/bash$/{print | "wc -l"}' /etc/passwd

cat /etc/passwd | awk -F : '/bash$/{print }' /etc/passwd   | wc -l

你可能感兴趣的:(数学建模,linux,运维,云计算,服务器)