有四个剑客,他们很厉害
Find
查询命令,就是
find
1 2 |
usage: find [-H | -L | -P] [-EXdsx] [-f path] path ... [expression] find [-H | -L | -P] [-EXdsx] -f path [path ...] [expression] |
- 常用参数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
-name file #查找名为file的文件; -type b/d/c/p/l/f #查是块设备、目录、字符设备、管道、符号链接、普通文件; -size n[c] #查长度为n块[或n字节]的文件; -perm #按执行权限来查找; -user username #按文件属主来查找; -group groupname #按组来查找; -mtime -n +n #按文件更改时间来查找文件,-n指n天以内,+n指n天以前; -atime -n +n #按文件访问时间来查找文件; -ctime -n +n #按文件创建时间来查找文件; -mmin -n +n #按文件更改时间来查找文件,-n指n分钟以内,+n指n分钟以前; -amin -n +n #按文件访问时间来查找文件; -cmin -n +n #按文件创建时间来查找文件; -nogroup #查无有效属组的文件; -nouser #查无有效属主的文件; -newer f1 !f2 #找文件,-n指n天以内,+n指n天以前; -depth #使查找在进入子目录前先行查找完本目录; -fstype #查更改时间比f1新但比f2旧的文件; -mount #查文件时不跨越文件系统mount点; -follow #如果遇到符号链接文件,就跟踪链接所指的文件; -cpio #查位于某一类型文件系统中的文件; -prune #忽略某个目录; -maxdepth #查找目录级别深度 |
-name
1 2 3 4 |
find /home/ -name ‘file‘ # 查询home目录下文件名为file的文件 find /home/ -name ‘[a-z]*‘ # 查找home目录下文件名以小写字母开头的文件 |
-type
1 2 3 4 5 6 |
find /home/ -type d # 查找home目录下的目录 find /home/ ! -type d # 查找home目录下的非目录 find /home -type d | xargs chmod 755 -R # 查找home目录下的目录,并将这个目录里的文件的权限设置为755 |
-size
1 2 3 4 5 6 |
find /home/ -size +1K # 查找home目录下文件大于1K的文件 find /home/ -size -1M # 查找home目录下文件小于1M的文件 find /home/ -size 10K # 查找home目录下文件等于10K的文件 |
-perm
1 2 3 4 5 6 |
find /home/ -perm -775 # 减号代表的意思是 比当前775更充足的权限 所有1的部分必须被匹配 find /home/ -perm +001 # 加号代表的意思是 只要有权限位置符合查询条件即可 find /home/ -perm 644 # 查询 644的文件及目录 |
Grep
Global search regular expression
1 2 3 4 |
usage: grep [-abcDEFGHhIiJLlmnOoqRSsUVvwxZ] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] |
- 常用参数
1 2 3 4 5 6 7 8 9 |
-a # 以文本文件方式搜索; -c # 计算找到的符合行的次数; -i # 忽略大小写; -n # 顺便输出行号; -v # 反向选择,即显示不包含匹配文本的所有行; -h # 查询多文件时不显示文件名; -l # 查询多文件时只输出包含匹配字符的文件名; -s # 不显示不存在或无匹配文本的错误信息; -E # 允许使用egrep扩展模式匹配。 |
- 常用通配符
1 2 3 4 5 6 7 8 9 |
* # 0个或者多个字符、数字; ? # 匹配任意一个字符; # # 表示注解; | # 管道符号; ; # 多个命令连续执行; & # 后台运行指令; ! # 逻辑运算非; [] # 内容范围,匹配括号中内容; {} # 命令块,多个命令匹配 |
- 正则表达式
1 2 3 |
* # 前一个字符匹配0次或多次 + # 前面的正则表达式1次或多次 ? # 前面的正则表达式出现0次或多次 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
^ # 匹配行首,即以某个字符开头; $ # 匹配行尾,即以某个字符结尾; \(..\) # 标记匹配字符; [] # 匹配中括号里的任意指定字符,但只匹配一个字符; [^] # 匹配除中括号以外的任意一个字符; \ # 转义符,取消特殊含义; \< # 锚定单词的开始; \> # 锚定单词的结束; {n} # 匹配字符出现n次; {n,} # 匹配字符出现大于等于n次; {n,m} # 匹配字符至少出现n次,最多出现m次; \w # 匹配文字和数字字符; \W # \w的反置形式,匹配一个或多个非单词字符; \b # 单词锁定符; \s # 匹配任何空白字符; \d # 匹配一个数字字符,等价于[0-9] |
- 练一个
1 |
# 查询文件ip地址 |
Awk
AWK
是一个优良的文本处理工具,Linux及Unix环境中现有的功能最强大的数据处理引擎之一以
Aho
、Weinberger
、Kernighan
三位发明者名字首字母命名为AWK
,AWK
是一个行级文本高效处理工具
AWK
经过改进生成的新的版本有Nawk
、Gawk
,一般Linux默认为Gawk
,Gawk
是AWK
的GNU
开源免费版本,也就是我们现在所使用的版本
AWK
基本原理是逐行处理文件中的数据,查找与命令行中所给定内容相匹配的模式如果发现匹配内容,则进行下一个编程步骤,如果找不到匹配内容,则 继续处理下一行
1 |
usage: awk [-F fs] [-v var=value] [-f progfile | ‘prog‘] [file ...] |
- 内置变量
变量 | 解释 |
---|---|
FS |
分隔符 |
OFS |
输出分隔符 |
NR |
当前行数,从-1 开始 |
NF |
当前记录字段个数 |
$0 |
当前记录 |
$1~$n |
当前记录第n个字段(列) |
- 内置函数
函数 | 解释 |
---|---|
gsub(r, s) |
在$0 中用s 代替r |
index(s, t) |
返回s 中t 的第一个位置 |
length(s) |
s 的长度 |
match(s, r) |
s 是否匹配r |
split(s, a, fs) |
在fs |
substr(s, p |
返回s 从p 开始的子串 |
- 操作符
操作符 | 解释 |
---|---|
++、– | 增加或减少 |
^、** | 指数 |
!、+、- | 非、一元加减 |
+、-、*、/、%、 | 四则运算、取余 |
<<、<=、==、!=、>=、> | 比较大小 |
&&、|| | 逻辑and、逻辑or |
=、+=、-=、=、/=、%=、^=、*= | 赋值 |
Sed
在处理文本时把当前处理的行存储在临时缓冲区中,称为:模式空间,pattern space
然后SED命令处理缓冲区中的内容,处理完成后将缓冲区的内容输出至屏幕或者写入文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
x # x为指定行号; x,y # 指定从x到y的行号范围; /pattern/ # 查询包含模式的行; /pattern/pattern/ # 查询包含两个模式的行; /pattern/,x # 从与pattern的匹配行到x号行之间的行; x,/pattern/ # 从x号行到与pattern的匹配行之间的行; x,y! # 查询不包括x和y行号的行; r # 从另一个文件中读文件; w # 将文本写入到一个文件; y # 变换字符; q # 第一个模式匹配完成后退出; l # 显示与八进制ASCII码等价的控制字符; {} # 在定位行执行的命令组; p # 打印匹配行; = # 打印文件行号; a\ # 在定位行号之后追加文本信息; i\ # 在定位行号之前插入文本信息; d # 删除定位行; c\ # 用新文本替换定位文本; s # 使用替换模式替换相应模式; n # 读取下一个输入行,用下一个命令处理新的行; N # 将当前读入行的下一行读取到当前的模式空间。 h # 将模式缓冲区的文本复制到保持缓冲区; H # 将模式缓冲区的文本追加到保持缓冲区; x # 互换模式缓冲区和保持缓冲区的内容; g # 将保持缓冲区的内容复制到模式缓冲区; G # 将保持缓冲区的内容追加到模式缓冲区。 |
sed工具默认处理文本,文本内容输出屏幕已经修改,但是文件内容其实没有修改
需要加-i参数即对文件彻底修改;
- 查看文件
1 2 3 4 5 6 7 |
cat -n file | sed -n "p" # 查看file文件 并且阅读其中所有行,因p前无规则 cat -n file | sed -n "1,3p" # 查看file文件 1-3行 sed "1p;\$p" file sed ‘1p;$p‘ file # 查看文件第一行和最后一行 |
- 删除文件内容
1 2 3 4 5 6 |
sed ‘1,3d‘ file # 删除文件第一到第三行 sed ‘$d‘ file # 删除文件最后一行 sed -i ‘/#*/d‘ file # 删除文件中以#号开头的行 |
- 替换文本内容
1 2 3 4 5 |
sed ‘s/old/new/g‘ file sed -i ‘s/old/new/g‘ file # 加了-i那么修改会影响到原本的文件对象 # 替换file文件中的old内容为new # s:使用替换模式替换相应模式 # g:将保持缓冲区的内容复制到模式缓冲区; |
- 追加文本内容
1 2 3 4 |
sed "/###/a 123123123" file # 在file的符合###匹配的 后面加一行123123123 sed "1,3a 123123123" file # 在文件的1,3行追加123123123 |
- 插入文本内容
1 2 3 4 |
sed "/###/a 123123123" file # 在file的符合###匹配的 前面加一行123123123 sed "1,3a 123123123" file # 在文件的1,3行前面加123123123 |
原文地址:https://www.cnblogs.com/wa1314/p/12154698.html
时间: 2024-11-02 02:18:03