@helen-
2019-03-20T07:22:58.000000Z
字数 1858
阅读 629
研究生学习
Linux基础
echo $ {A#*//}
# 从左往右找到第一个// 删除它前面的所有内容
## 双井号 从左往右找到最后一个// 删除它前面的内容
%//* 从左往右找到第一个// 删除它后面的内容
# 删前 % 删后
echo ${VAR/hello/hi}
#替换第一个hello为hi
echo ${VAR//hello/hi}
#替换所有的hello为hi
echo ${#VAR[@]} #数组长度
echo ${#var} #变量长度
-c # 统计文件字节数
-m # 统计字符数
-l # 统计多少行
-L # 统计字符串长度
-w # 统计字数 单词 按照空格分割
* #行数 单词数 字节数
-f #忽略大小写
-M #根据月份比较
-h #根据文件大小
-g #按数值排序
-n #根据字符串数值比较
-r # 倒序排序
-k 位置1,位置2 #按照从第1个位置到第二个位置排序 (和t搭配)
-t 紧跟分隔符内容 #指定分隔符
-u #去重
-o #结果写入文件
sort -t: -k2,2 -k3r sort.txt
# 按照冒号:分割,第二个字段升序,第三个字段降序 排列sort.txt内容
sort -t: -k2,2 -u sort.txt
# 以冒号分割,按照第二个字段去重
统计相邻两行是否重复 去掉
# 正确做法 先排序 再去重
sort uniq.txt | uniq
sort uniq.txt | uniq -c
#统计出现次数 1:不重复 大于1重复
sort uniq.txt | uniq -u
#打印不重复的
sort uniq.txt | uniq -d
#打印重复的
交并集
交集:
cat b.txt a.txt | sort | uniq -d
并集:
cat b.txt a.txt | sort | uniq
差集:A-B (强行让B中的数据出现2次)
cat b.txt b.txt a.txt | sort |uniq -u
cut可以从一个文本文件或文本流中提取文本列
cut -d: -f1-3 sort.txt
#以冒号分割 取sort文件中的1到3列
-c 按字符切割
-b 按字节切割
中文 一个字符 2-3个字节
默认按照空白符分割
awk '{print $1}' # 打印第一个域
-F: # 指定分隔符
内置变量:
FILENAME 文件名
FNR 总行数
NR 是文件的第几行
NF 域的个数
FS 设置分隔符 -F改变
OFS 输出域分隔符
awk -F: '{print $1 "-" $2}' /etc/passwd
awk -F: 'BEGIN{} {print $1 $2} END{}' /etc/passwd # 在执行print之前 先执行begin内容 最后再执行end内容
#帮助控制awk执行顺序
awk 'BEGIN{x=0} {x++} END{print x}'
# 打印行数
awk -F: '/root/{print $3}' /etc/passwd
# 寻找含有root条例 打印第三个域的内容
# 打印99乘法表
awk 'BEGIN{
for(i=1;i<=9;i++){
for(j=1lj<=i;j++){
printf i "*" j "=" i*j "";}
print""}
}
文本生成器 搜索
-c 有多少行匹配
-v 有多少行不匹配 返回该行内容 结果反转
-E 正则表达式
-i 忽略大小写
-n 输出前加行号
-o 输出文件匹配到的部分
-A after
-B before
-C 前后
tip:
正则表达式:
^ 以..开头 / 非 两种意义
$以 .. 结尾
[ ] 范围
流编辑器 一行一行处理 一般不对文件内容直接进行修改 不写入文件
-n 输出变动的行
-e 允许输入多条命令
-i 对文本本身进行编辑 而不是由屏幕输出 而是写入文件
动作
a 追加 后一行
c 行替换
i 插入 前一行
p 打印
s 字符串替换
删除:d命令
sed,'2,$d' sed.txt 从第二行到最后一行删除
sed '/is/d' sed.txt
删除包含is的行
sed '/[A-Za-z]/d' sed.txt
正则表达式 删除带字母的行
整行替换 : c命令
sed '2c helloworld' sed.txt
把第二行替换为hello
字符串替换: s命令
sed 's/hello/hi/g' sed.txt
全局替换
/2 只替换第2个
/2g 只替换第2个以后的
可以和正则表达 /^hello /
sed -n 's/^hello/hi/p' sed.txt
第一个单词是hello的行替换为hi
同时打印被替换的那些行
/&-hi/ 替换为原来的单词-hi
/\(liu\)/\1li/ 把liu改成li
/ 也可以用#*等(跟在s后面的就是分隔符) 当文本出现/的时候 可以用这种方法解决冲突
搜索文件目录层次结构
find . -name ".txt"
当前目录下找格式为txt的文件
-o 或者
-a 同时
-perm 按照权限