awk、xargs、sed、sort、find命令的使用

  1. xargs
  2. awk
  3. sed
  4. sort
  5. find

xargs

xargs可以将输入内容,转成后续命令的参数

  1. -d 指定参数的分隔符,替换为空格然后给后面的命令执行
    # echo '11@22@33' | xargs -d '@' echo
    11 22 33
    
  2. -p 输出每次要执行的命令并询问是否要执行
    # echo '11@22@33' | xargs -p -d '@'  echo
    echo 11 22 33
    ?...y
    11 22 33
    
  3. -n 指定每次最多传递多少个参数给后面的命令执行
    # echo '11@22@33@44@55@66@77@88@99@00' | xargs -d '@' -n 3 echo
    11 22 33
    44 55 66
    77 88 99
    00
    
  4. -E(或-e eof-str) 只传递指定的字符串之前的参数。当存在 -d 时,-E 不起效
    # echo '11 22 33' | xargs -E '33' echo
    11 22
    
  5. -I 使用指定的字符串代替命令行参数
    ls *.js | xargs -t -I {} cp {} {}.backup
    

awk

awk 是一个强大的文本分析工具,它是 Linux 中功能强大的数据处理引擎之一。
相对于 grep 的查找,sed 的编辑,awk 在其对数据分析并生成报告时,显得尤为强大。

主要用来将输入内容按列分割

其中的$1..$n表示第几例。$0表示整行。NF 总列数,NR 第几行,FS 输入的字段分隔符,默认空格或Tab

peach    100   Mar  1997   China
Lemon    150   Jan  1986   America
Pear     240   Mar  1990   Janpan
avocado  120   Feb  2008   china

awk '{print $0}' fruit.txt   # 表示打印输出文件的每一整行的内容
awk '{print $1}' fruit.txt   # 表示打印输出文件的每一行的第 1 列内容
awk '{print $1, $2}' fruit.txt
awk '/P.*/{print $0}' poetry.txt # 正则匹配P开头的行

注意,在 cmake 文件中, awk的参数前需要多加一个$,因为make文件中的$有特殊含义

find ${hotfix_res}${version}/ -name '*.go' | awk '{ cmd="go build -buildmode=plugin -o "$$0".so "$$0; printf cmd"\n"; system(cmd);}'

sed

sed 是字符流编辑器,一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。

sed 使用正则表达式替换文本

  1. my字符串替换成User’s (g 表示匹配所有,s 是替换指令,d 是删除指令,a 是追加,i 是插入…)
    sed "s/my/User's/g" pets.txt
    
  2. sed替换文件内容
    -i表示直接在文件内替换,双引号"需要加斜杠\转义
    echo '"ai_time": 10,'|sed "s/\"ai_time\": [0-9]*/\"ai_time\": 6/g"
    sed -i "s/\"ai_time\": [0-9]*/\"ai_time\": 6/g" filename
    

sort

sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。
sort 默认将每行按字符顺序升序输出

-b 去掉开头空白部分再比较
-c 输出第一个乱序的行,并返回1
-C 检查是否乱序,乱序返回1
-f 忽略大小写
-k [n] 指定第几列排序
-n 转换成数字来排序
-o [filename]重定向输出
-r 降序输出
-t [:] 指定分隔符
-u 去除重复行

find

  1. 按照时间排序指定目录的文件,保留最近的5个文件,从第6个开始删除
    ls ${WORKSPACE} -t | grep 'servers_.*.tgz' | sed -n '6,$p' | xargs -I {} rm -f ${WORKSPACE}/{}
    
  2. 删除指定目录 5天之前修改的文件
    find ${WORKSPACE} -type f -mtime +5 -name "servers_*" -exec rm -f ${WORKSPACE}/{} \;
    
    find 参数说明
    -amin -n: 最后一次访问发生在 n分钟 之内
    -amin n: 最后一次访问发生在距离当前时间 n分钟 至 (n+1)分钟
    -amin +n: 最后一次访问发生在 (n+1)分钟 之外
    -atime -n: 最后一次访问发生在 n天 之内
    -atime n: 最后一次访问发生在 n天 至(n+1)天
    -atime +n: 最后一次访问发生在 (n+1)天 之外
    -cmin -n: 最后一次文件状态修改发生在 n分钟 之内
    -cmin n: 最后一次文件状态修改发生在 n分钟 至 (n+1)分钟
    -cmin +n: 最后一次文件状态修改发生在 (n+1)分钟 之外
    -ctime -n: 最后一次文件状态修改发生在 n天 之内
    -ctime n: 最后一次文件状态修改发生在 n天 至 (n+1) 天
    -ctime +n: 最后一次文件状态修改发生在 (n+1)天 之外
    -mmin -n: 最后一次文件内容修改发生在 n分钟 之内
    -mmin n: 最后一次文件内容修改发生在 n分钟 至 (n+1)分钟
    -mmin +n: 最后一次文件内容修改发生在 (n+1)分钟 之外
    -mtime -n: 最后一次文件内容修改发生在 n天 之内
    -mtime n: 最后一次文件内容修改发生在 n天 至 (n+1)天
    -mtime +n: 最后一次文件内容修改发生在 (n+1)天 之外
    
    例如查找文件内容修改发生在2天之内的文件
    find /var/log/hive/-name “*” -mtime -2
    

Linux 查看磁盘空间

参考:

xargs; https://www.cnblogs.com/chyingp/p/linux-command-xargs.html

sort: https://www.cnblogs.com/51linux/archive/2012/05/23/2515299.html

sort命令:http://man.linuxde.net/sort

awk简明教程: https://coolshell.cn/articles/9070.html

awk: http://einverne.github.io/post/2018/01/awk.html#awk-%E5%86%85%E7%BD%AE%E5%8F%98%E9%87%8F%E7%9A%84%E4%BD%BF%E7%94%A8

sed简明教程:https://coolshell.cn/articles/9104.html

sed: http://einverne.github.io/post/2018/01/sed.html

find: https://blog.csdn.net/cqsizhuang/article/details/107220325


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 using1174@foxmail.com

文章标题: awk、xargs、sed、sort、find命令的使用

文章字数: 1,371

本文作者: Jun

发布时间: 2018-07-24, 20:02:00

最后更新: 2022-08-19, 20:12:46

原始链接: http://yoursite.com/2018/07/24/awk、xargs命令的使用/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏