1.7. xagrs将字符结果转化为参数传递给后面命令,通常与管道连用 13
1.11. factor 分解出数的所有因数(除了1和本身) 19
文本处理命令
shift
将位置参数变量向前移动(默认一位)
exec
在当前shell下执行指定命令,然后退出shell
find ./ -maxdepth 1 -name '*.txt' ! -name '.*' -exec -rm -rf {} \;删除当前目录下深度为1(不包括其下的子目录)和隐藏目录,名字为.txt结尾的文件
字符串操作
求变量长度
echo $PATH | wc -L
#搭配大括号
expr length $name
awk中的length函数
求字符长度
expr length 字符(字节长度)
wc -L 求字符字节长度
awk
对变量字符串进行截取
格式:${字符串:开始截取的索引:截取长度}
":" 截取
从第四位开始截取(因为第一位是0)
从第四位开始截取,向后截取3位
删除
#(#)字符 *字符 删除
正向匹配${name#(#)A*c}一个#属于不贪婪匹配,两个#属于贪婪匹配,尽可能多匹配的删除
%(%)字符*字符 删除
反向匹配用%,从尾部匹配,%%贪婪 %不贪婪
字符替换
/(/)字符/字符 替换
同理,//位贪婪匹配,/为不贪婪匹配
排序命令sort(TK)
格式: sort [选项] 文件名
选项
-n 以数值进行排序(不加-n默认为字符串型)
以第三行UID进行排序
-t 指定分隔符,默认是分隔符是制表符或空格
-k 选项指定字段号
基本用法
指定分隔符
若想按照第二段排序
sort -t ":" -k 2,2 -k 3,3 /etc/passwd 指定“:”为分隔符,按照第2列排序,之后再排序第三列
例子
-k 3.1代表以第三个字段第一个字符进行排序
-r 反向排序
-u (unique) 取消重复
-f 忽略大小写
uniq
去除相邻的重复行
配合sort使用
-c 统计重复行出现的次数
tr
替换字符串
基本格式echo'字符串 ' | tr '要被替换的字符串' '替换成的字符串'
若没有依次单独指定的字符,当排序到最后会重复替换最后指定的那个字符,但是如果多分配替换的字符,如果前面都被替换,则不继续替换
将所有小写字母替换成大写字母
可以错位进行排序,可以指定范围
将abcde 改成12345
-d删除字符串并显示
可以直接对文件进行操作,需要加于重定向输入符号
-s 去除相邻的重复字符
常用于去掉多余的空格
-c 排除
排除替换
除了数字以外都替换成*
xagrs将字符结果转化为参数传递给后面命令,通常与管道连用
可以传递的命令(删除为例)
find ./ -name a.txt -exec rm -rf {} \;
rm -rf $(find ./ -name a.txt)
find ./ -name "a.txt" | xagrs rm -rf (通过管道的方法)
复杂的处理(管道符后出现2个或者多个参数)-i 以大括号来接受传递的结果
find ./-name "*.txt" | xargs -i mv {} bak
xargs拼接字段 -n 以空格分隔形式连接n个字段为一行
先统计所有字段,再根据数字换行分配
也可以配合tr使用
xargs -d "符号" 将符号变成空格
便于将所有内容显示在第一行
rev将内容镜像输出
wc
-l 统计行号
-L 统计长度
-w 统计单词数
-m 统计字符数
-c 字节数
cut命令(敌法)
例子:
中间分隔符必须用tab键(制表符)来分割,空格不可以当作默认分隔符
-d 指定以什么为分隔符
截取所有普通用户的用户名
cut 是无法截取以空格为分隔符的内容,比如说df -Th中的内容无法直接提取
-f 指定提取列
提取第二列
不看第一行并提取第二列和第四列
其他两种切割方式
-b 按照字节进行切割
当涉及中文时,按照字节和按照字符分割可以看出区别
-c 字符范围,以第一行为标准,n-m表示从第n个字符到第m个字符
截取第7-14列的所有字符
截取第四个字符之后所有字符
这里面第几个字符要算上空格或者tab键
factor 分解出数的所有因数(除了1和本身)
文件处理
tee
双重重定向,辅助生成日志文件,产生两份文件,默认覆盖
-a 追加
合并文件join
默认合并相同字段,其他内容向后排列合并
行数不能发生错乱会报错,以某列正常以空格分割字段
如果想要将文件上下合并输出,只需要cat
paste合并文件
直接横向合并
选项 -d “”指定连接符号(默认空格连接)
-s 将多行以一行输出
-s 只读一行 -d 指定分隔符先=后换行,写一个字符就计算一个分隔符
上图分别代表以=为连接符,1、先读2行再换行 2、先读三行再换行 4、先读四行再换行(有几个“-”为每行有几个字段)
全部指定分隔符(包括换行)行合并
-d 合并行paste -d ‘=’- - <a.txt
有几行写几个“-”,少了s,多加了一个输入重定向
和-sd的区别和相似
split切割文件
-l 指定行数进行切割
-b 以字节进行切割
-d 指定数字后缀为(默认为01、02······)
-a指定后缀位数
在参数后面写想要的名字
若想恢复可以用cat合并
diff 和vimdiff比较两个文件不同
vimdiff(要退出两次)
diff
取路径中的目录和文件
dirname 取路径中的目录部分
$(dirname $0)
basename 取路径中文件名
$(basename $0)
rename 批量修改文件名
格式:rename 要被替换的字符串 换成什么样的字符串 被替换的文件名(支持通配符)
例题:把当前目录(包含子目录)下所有后缀为“.sh”的文件后缀变更为“.shell”
find ./ -name “*.sh” -exec rename .sh .shell {} \;
当然 find ./ -name "*.shell" | xargs rename .shell .sh {} 和 rename .shell .sh $(find ./ -name "*.shell") 都可以处理,注意包含子目录用find ./
发布者:LJH,转发请注明出处:https://www.ljh.cool/35184.html