前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >三剑客命令

三剑客命令

作者头像
云计算小黑
发布2022-12-28 20:14:17
3.4K0
发布2022-12-28 20:14:17
举报
文章被收录于专栏:小黑博客小黑博客

find 命令语法

find 查找的目录 -type 类型信息 -name "文件名"

代码语言:javascript
复制
find   /etc     -type f -name "hosts"
find  /etc -type f -name "*eth0"  #模糊查找,文件名记不清
find  /etc -type f -i -name "if*" #忽略大小写

根据数据大小查找
find /etc -type f -size +100   #找出大于100k文件
find /etc -type f -size -100   #找出小于100k文件
find /etc -type f -size +1M    #找出大于1m文件

根据目录指定层级查找
find /etc -maxdepth 1 -type f -name "123.txt"

如何把一个目录中所有“*.txt”文件进行压缩
find /home -type f -name "*.txt"|xargs tar -zcvf /home/home.tar.gz

如何找出/home目录中".txt"文件进行删除
1、find /home -type f -name "*.txt" -delete
2、find /home -type f -name "*.txt" -exec rm-f {} \;
3、find /home -type f -name "*.txt"|xargs rm -f
4、rm -rf $(find /home -type f -name "*.txt")

如何找出/home目录中".txt"文件进行文件复制/移动
find /home -type f -name "*.txt" -exec cp {} /tmp \;
find /home -type f -name "*.txt" |xargs cp -t /tmp 
find /home -type f -name "*.txt" -exec mv {} /tmp \;

元字符

功能

意思

^

匹配行首

表示以某个字符开头

$

匹配行尾

表示以某个字符结尾

^$

空行的意思

表示空行的意思

.

匹配任意单个字符

表示任意一个字符

*

字符* 匹配0或多个此字符

表示重复的任意多个字符

\

屏蔽一个元字符的特殊含义

表示去掉有意义的元字符的含义

[]

匹配中括号内的字符

表示过滤括号内的字符

.*

代表任意多个字符

就是代表任意多个字符

lele{n}

用来匹配前面lele出现次数。n为次数

就是统计前面lele出现的次数

lele{n,}

含义同上,但次数最少为n

从功能就可以看出

lele{n,m}

义同上,但lele出现次数在n与m之间

从功能就可以看出

lele{n,m}

义同上,但lele出现次数在n与m之间

从功能也可以看出

三剑客的功能非常强大,但我们只需要掌握他们分别擅长的领域即可:grep擅长查找功能,sed擅长取行和替换。awk擅长取列。

grep命令

文本过滤(模式:pattern)工具,grep, egrep

grep [OPTIONS] PATTERN [FILE...]

代码语言:javascript
复制
--color=auto 对匹配到的文本着色显示
-v 显示不被pattern匹配到的行
-i 忽略字符大小写
-n 显示匹配的行号
-c 统计匹配的行数
-o 仅显示匹配到的字符串
-q 静默模式,不输出任何信息
-A # after, 后#行
-B # before, 前#行
-C # context, 前后各#行
-e 实现多个选项间的逻辑or关系
grep –e ‘cat ’ -e ‘dog’ file
-w 匹配整个单词
-E 使用ERE,相当于egrep
-F 相当于fgrep,不支持正则表达式

找出123开头的行grep "^123" 文件找出456结尾的行grep "456

系统的正则符号

基础正则符号: 1)点符号:. 匹配一个字符且只有一个字符 grep "." ~/test.txt grep "." ~/test.txt -o #-o 显示匹配过程 2)星号:* 匹配一个字符连续出现30次或者多次 grep "0*" test.txt 3)点星组合

代码语言:javascript
复制
grep ".*" 123.txt
grep "^m.*n$" 123.txt

贪婪匹配

代码语言:javascript
复制
grep "^r.*x$" 123.txt #这种情况会把文件中从第一个r开头一直x结尾的匹配出来,中间如果有两三个x,也会被匹配出来
指定具体信息阻止贪婪匹配
grep "^r.*wex" 123.txt

4)括号符号[] 匹配多个信息

代码语言:javascript
复制
grep "te[as]t" test.txt #找出teat和test

5)括号和尖号[^]

代码语言:javascript
复制
grep "[abc]" /test.txt #找出abc的行
grep "[^abc]" /test.txt #找出abc以外的行
grep "^[^abc]" /test.txt #排出abc以外的行

扩展正则符号

默认grep、sed不能直接识别 grep ——> egrep /grep -E sed ——> sed -r

+号符号

匹配前一个字符连接出现1次或者多此 egrep "0+" test.txt

|匹配多个信息

grep -E "123|456" test.txt grep -E "te[as]t" test.txt

符号括号:()

作用: 1、指定信息进行整体匹配

代码语言:javascript
复制
grep -E "wqe(as)d" test.txt

sed

sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。然后读入下行,执行下一个循环。如果没有使诸如‘D’ 的特殊命令,那会在两个循环之间清空模式空间,但不会清空保留空间。这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。

sed [option]... 'script' inputfile

代码语言:javascript
复制
选项
-n 不输出模式空间内容到屏幕,即不自动打印
-e 多点编辑
-f /PATH/SCRIPT_FILE: 从指定文件中读取编辑脚本
-r 支持使用扩展正则表达式
-i 直接编辑文件
-i.bak 备份文件并原处编辑
script 地址定界
不给地址:对全文进行处理
单地址:
#: 指定的行,$:最后一行
/pattern/:被此处模式所能够匹配到的每一行
地址范围:
#,#
#,+#
/pat1/,/pat2/
`#,/pat1/
~:步进
1~2 奇数行
2~2 偶数行
编辑命令:
d 删除模式空间匹配的行,并立即启用下一轮循环
p 打印当前模式空间内容,追加到默认输出之后
a [\]text1 在指定行后面追加文本,支持使用\n实现多行追加
i [\]text 在行前面插入文本
c [\]text 替换行为单行或多行文本
w /path/somefile 保存模式匹配的行至指定文件
r /path/somefile 读取指定文件的文本至模式空间中匹配到的行后
= 为模式空间中的行打印行号
! 模式空间中匹配行取反处理
s///:查找替换,支持使用其它分隔符,s@@@,s###
替换标记:
g 行内全局替换
p 显示替换成功的行
w /PATH/TO/SOMEFILE 将替换成功的行保存至文件中


直接修改读取的文件内容,而不是输出到终端。
s :取代,可以直接进行取代的工作。

g: 是全局的意思。其中#是格式符,他也可以是@或者别的/。

Sed替换格式是:sed -i 's/要替换的内容/替换成的内容/g' 文件名。

1、找出文件中有test行的信息

代码语言:javascript
复制
sed -n '/test/' test.txt

2、在test前面添加123,在test后面添加456信息

代码语言:javascript
复制
sed -e '/test/i123 -e /test/456' /test.txt

3、sed删除命令

代码语言:javascript
复制
sed '3d' test.txt #删除前三行
sed '2,6d' test.txt #删除多行
sed '/test/d' test.txt #删除test行
sed '3d;6d' test.txt #删除3行和6行

4、利用sed命令取消空行显示

代码语言:javascript
复制
sed -n '/^$/!p' test.txt
sed -n '/./p' test.txt
sed '/^$/d' test.txt

5、修改内容

代码语言:javascript
复制
sed 's#原有的内容#修改的内容#g' 文件

PS:修改文件内容直接备份 sed -i .bak 's#xxx#yyy#g' test.txt

n和i参数同时使用会将文件内容清空 6、批量修改文件扩展名:将test.txt扩展名修改为.png

代码语言:javascript
复制
ls test*.txt|sed -r 's#(.*)txt#mv&\|png#g' |bash
专业命令
rename 'txt                       .png        text.txt
命令    文件名称需要修改的部分信息  修改的信息   文件

awk命令

作用: (1) 排除信息 (2) 查询信息 (3) 统计信息 (4) 替换信息 语法格式 awk [参数] '模式-动作' 文件

查询信息

代码语言:javascript
复制
awk 'NR==2' test.txt   #显示第二行
awk 'NR==2, NR==4' test.txt #显示二到四行
awk 'NR==2; NR==4' test.txt #显示二和四行
awk '/wang/' test.txt  #显示wang行
awk '/wang/,/666/' test.txt #显示有wang的行到有666行
awk '/wang/;/666/' test.txt #显示wang行和666行
awk '/wang/ {print $1 $3}' test.txt #显示有wang行的第一列和第三列内容
awk '/wang/ {print $1 "," $3}'  test.txt #同上

文件空行进行排除/注释排除

代码语言:javascript
复制
grep -E "^#|^$" 文件
sed -n '/^#|^$/!p' 文件
awk '$0~/^#|^$/' 文件
awk '$0!~/^#|^$' 文件

总结:awk命令中符号1,2,3 :取第几列信息NF :取最后一列(NF-n) :取倒数第n列

正则表达式与操作符

awk同sed一样也可以通过模式匹配来对输入的文本进行匹配处理。 awk也支持大量的正则表达式模式,大部分与sed支持的元字符类似,而且正则表达式是玩转三剑客的必备工具。

awk支持的正则表达式元字符

BEGIN {} 在awk执行命令前做什么事情 BEGIN模块在awk读取文件之前就执行,BEGIN模式常常被用来修改内置变量ORS,RS,FS,OFS等的值。可以不接任何输入文件

代码语言:javascript
复制
[root@creditease awk]# awk 'BEGIN{print "=======start======"}{print $0}' awk.txt 
=======start======
ABC#DEF#GHI#GKL$123
BAC#DEF#GHI#GKL$213
CBA#DEF#GHI#GKL$321

END {} 在awk执行命令结束后做什么事情 END在awk读取完所有的文件的时候,再执行END模块,一般用来输出一个结果(累加,数组结果)。也可以是和BEGIN模块类似的结尾标识信息。

代码语言:javascript
复制
[root@creditease awk]# awk 'BEGIN{print "=======start======"}{print $0}END{print "=======end======"}' awk.txt
=======start======
ABC#DEF#GHI#GKL$123
BAC#DEF#GHI#GKL$213
CBA#DEF#GHI#GKL$321
=======end======

统计/etc/services 文件的#号开头的行

代码语言:javascript
复制
awk '/^#/ {i=i++;print i}' /etc/services
或者
[root@creditease awk]# grep "^$" /etc/services  |wc -l
17
[root@creditease awk]# sed -n '/^$/p' /etc/services |wc -l
17
[root@creditease awk]# awk '/^$/' /etc/services |wc -l
17
[root@creditease awk]# awk '/^$/{i=i+1}END{print i}' /etc/services
17

统计有多少个虚拟用户和普通用户

代码语言:javascript
复制
普通:awk '$NF~/bash/ {i=i++}END{print i}' /etc/passwd
虚拟:awk '$NF!~/bash/ {i=i++}END{print i}' /etc/passwd

求和计算

sum =sum+$n

代码语言:javascript
复制
seq 10|awk '{sum=sum+$1;print sum}'
[root@creditease awk]# seq 100|awk '{i=i+$0}END{print i}'
5050
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • find 命令语法
  • grep命令
    • grep [OPTIONS] PATTERN [FILE...]
    • 系统的正则符号
      • 扩展正则符号
      • +号符号
      • |匹配多个信息
      • 符号括号:()
      • sed
        • sed [option]... 'script' inputfile
        • awk命令
          • 查询信息
            • 文件空行进行排除/注释排除
              • 统计/etc/services 文件的#号开头的行
              • 统计有多少个虚拟用户和普通用户
          • 正则表达式与操作符
            • 求和计算
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档