Shell编程之字符串处理

64 阅读2分钟

image.png

一、通配符

  1. × 匹配任意字符
  2. ? 匹配任意一个字符
  3. [] 匹配中括号中的一个字符

二、正则表达式

image.png 注意:

grep '^[0-9]' test.txt 代表0-9中任意一个字符开头的 中括号之内代表开头

grep '[^0-9]' test.txt 代表不是由数字开头的 中括号之外代表取反

三、字符截取 cut awk

  1. cut
  • -f 1 截取第一列 -f 2,3 截取第二列和第三列
  • -d ":" 以冒号作为分隔符截取 ,默认是以制表符作为分隔符
  1. printf a. 输出类型:
    • %ns:输出字符串,n代表输出几个字符串
    • %ni:输出整数,n代表输出几个数字
    • %m.nf:输出浮点数,m和n指代输出的整数位数和小数位数,如%8.2f代表是一个8位的数,6位整数,2位小数
    b. 输出格式:

image.png

printf '%s\t%s\n' 1 2 3 21 21 一行输出两个字符串

  1. awk '条件1{动作1}条件2{动作2}' 文件
    1. awk 'BEGIN{print "print start!!!"}{print $1}' student.txt 打印开始之前加个print start
    2. awk 'END{print "print end!!!"}{print $1}' student.txt 末尾打印print end!!!
    3. cat /etc/passwd | awk 'BEGIN{FS=":"}{print $1}' 设置分割符,必须加BEGIN,因为是先赋值变量在执行打印的,如果不加begin,第一句的打印就不是以:来作为分割的。
    4. cat student.txt | grep -v id | awk '3>12{print 1}' 加条件判断

四、字符替换 sed

  • sed 选项 '[动作]' 文件名
    • 选项:
      • -n 只把经过sed处理过的内容才会显示
      • -e 允许对输入的数据应用多条sed命令
      • -i 用sed的修改结果直接修改读取数据的文件,而不是屏幕输出
    • 动作:
      • -a 追加,在当前行后面添加一行或多行
      • -c 行替换,在c后面的字符串替换掉原数据行
      • -i 插入
      • -d 删除
      • -p 打印
      • -s 字符串替换,用一个字符串替换另一个字符串。格式为“行范围s/旧字符串/新字符串/g” 加/g是将范围内的字符串全部替换
    • 示例:sed -n '2p' student.txt 只打印第二行
    • sed -i '5s/22/30/g' student.txt 把第5行的22替换成30
    • sed -e 's/xiaowang/wang/g;s/xiaoming/ming/g' student.txt 一次执行多个替换语句

番外:提取数字

  1. echo "2014年7月21日" | tr -cd "[0-9]"
  2. 这样就可以提取出2014721

五、排序

  • sort [选项] 文件名
    • -f 忽略大小写
    • -n 以数值型进行排序
    • -r 反向排序
    • -t 指定分隔符
    • -k n[,m] 按照指定的字段范围排序,从n字段开始,m字段结尾
    • 示例:sort -t ":" -k "3,3" /etc/passwd 用:把一行数据分割开之后的第三个字段来进行排序

六、统计命令

  • wc [选项名] 文件
    • -l 统计行数
    • -w 统计单词数
    • -m 统计字符数

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 6 天,点击查看活动详情