[关闭]
@helen- 2019-03-20T07:22:58.000000Z 字数 1858 阅读 629

DAY5 字符串处理

研究生学习 Linux基础


字符串删除截取

  1. echo $ {A#*//}
  2. # 从左往右找到第一个// 删除它前面的所有内容

## 双井号 从左往右找到最后一个// 删除它前面的内容

%//* 从左往右找到第一个// 删除它后面的内容

# 删前 % 删后

字符串替换

  1. echo ${VAR/hello/hi}
  2. #替换第一个hello为hi
  3. echo ${VAR//hello/hi}
  4. #替换所有的hello为hi

字符串长度

  1. echo ${#VAR[@]} #数组长度
  2. echo ${#var} #变量长度

WC

  1. -c # 统计文件字节数
  2. -m # 统计字符数
  3. -l # 统计多少行
  4. -L # 统计字符串长度
  5. -w # 统计字数 单词 按照空格分割
  6. * #行数 单词数 字节数

sort

  1. -f #忽略大小写
  2. -M #根据月份比较
  3. -h #根据文件大小
  4. -g #按数值排序
  5. -n #根据字符串数值比较
  6. -r # 倒序排序
  7. -k 位置1,位置2 #按照从第1个位置到第二个位置排序 (和t搭配)
  8. -t 紧跟分隔符内容 #指定分隔符
  9. -u #去重
  10. -o #结果写入文件
  11. sort -t: -k2,2 -k3r sort.txt
  12. # 按照冒号:分割,第二个字段升序,第三个字段降序 排列sort.txt内容
  13. sort -t: -k2,2 -u sort.txt
  14. # 以冒号分割,按照第二个字段去重

uniq

统计相邻两行是否重复 去掉

  1. # 正确做法 先排序 再去重
  2. sort uniq.txt | uniq
  3. sort uniq.txt | uniq -c
  4. #统计出现次数 1:不重复 大于1重复
  5. sort uniq.txt | uniq -u
  6. #打印不重复的
  7. sort uniq.txt | uniq -d
  8. #打印重复的

交并集

  1. 交集:
  2. cat b.txt a.txt | sort | uniq -d
  3. 并集:
  4. cat b.txt a.txt | sort | uniq
  5. 差集:A-B (强行让B中的数据出现2次)
  6. cat b.txt b.txt a.txt | sort |uniq -u

cut

cut可以从一个文本文件或文本流中提取文本列

  1. cut -d: -f1-3 sort.txt
  2. #以冒号分割 取sort文件中的1到3列
  3. -c 按字符切割
  4. -b 按字节切割
  5. 中文 一个字符 2-3个字节

awk

默认按照空白符分割

  1. awk '{print $1}' # 打印第一个域
  2. -F: # 指定分隔符
  3. 内置变量:
  4. FILENAME 文件名
  5. FNR 总行数
  6. NR 是文件的第几行
  7. NF 域的个数
  8. FS 设置分隔符 -F改变
  9. OFS 输出域分隔符
  10. awk -F: '{print $1 "-" $2}' /etc/passwd
  11. awk -F: 'BEGIN{} {print $1 $2} END{}' /etc/passwd # 在执行print之前 先执行begin内容 最后再执行end内容
  12. #帮助控制awk执行顺序
  13. awk 'BEGIN{x=0} {x++} END{print x}'
  14. # 打印行数
  15. awk -F: '/root/{print $3}' /etc/passwd
  16. # 寻找含有root条例 打印第三个域的内容
  17. # 打印99乘法表
  18. awk 'BEGIN{
  19. for(i=1;i<=9;i++){
  20. for(j=1lj<=i;j++){
  21. printf i "*" j "=" i*j "";}
  22. print""}
  23. }

grep

文本生成器 搜索

  1. -c 有多少行匹配
  2. -v 有多少行不匹配 返回该行内容 结果反转
  3. -E 正则表达式
  4. -i 忽略大小写
  5. -n 输出前加行号
  6. -o 输出文件匹配到的部分
  7. -A after
  8. -B before
  9. -C 前后

tip:
正则表达式:
^ 以..开头 / 非 两种意义
$以 .. 结尾
[ ] 范围

sed

流编辑器 一行一行处理 一般不对文件内容直接进行修改 不写入文件

-n 输出变动的行
-e 允许输入多条命令
-i 对文本本身进行编辑 而不是由屏幕输出 而是写入文件

动作
a 追加 后一行
c 行替换
i 插入 前一行
p 打印
s 字符串替换

  1. 删除:d命令
  2. sed,'2,$d' sed.txt 从第二行到最后一行删除
  3. sed '/is/d' sed.txt
  4. 删除包含is的行
  5. sed '/[A-Za-z]/d' sed.txt
  6. 正则表达式 删除带字母的行
  7. 整行替换 : c命令
  8. sed '2c helloworld' sed.txt
  9. 把第二行替换为hello
  10. 字符串替换: s命令
  11. sed 's/hello/hi/g' sed.txt
  12. 全局替换
  13. /2 只替换第2
  14. /2g 只替换第2个以后的
  15. 可以和正则表达 /^hello /
  16. sed -n 's/^hello/hi/p' sed.txt
  17. 第一个单词是hello的行替换为hi
  18. 同时打印被替换的那些行
  19. /&-hi/ 替换为原来的单词-hi
  20. /\(liu\)/\1li/ liu改成li
  21. / 也可以用#*等(跟在s后面的就是分隔符) 当文本出现/的时候 可以用这种方法解决冲突

find

搜索文件目录层次结构

find . -name ".txt"
当前目录下找格式为txt的文件
-o 或者
-a 同时
-perm 按照权限

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注