shell笔记

xargs

xargs是一条Unix和类Unix操作系统的常用命令。它的作用是将参数列表转换成小块分段传递给其他命令,以避免参数列表过长的问题[1]。
例如,下面的命令:
本例中xargs将find产生的长串文件列表拆散成多个子串,然后对每个子串调用rm。-print0表示输出以null分隔(-print使用换行);-0表示输入以null分隔。这样要比如下使用find命令效率高的多。

# 删除/path目录下所有的文件(文件夹为-type d)
rm `find /path -type f`
# 如果path目录下文件过多就会因为“参数列表过长”而报错无法执行。但改用xargs以后,问题即获解决。
find /path -type f -print0 | xargs -0 rm

awk

awk if

awk -F: '{if ($1=="root") print $1, "Admin"; else print $1, "Common User"}' /etc/passwd

脚本

基本格式

#!/bin/bash
#用于释放内存的脚本
#头部
memoryused=`free|grep 'Mem'|awk '{print $2-$3-1400000}'`
echo $((memoryused))
if [ $memoryused -le 0 ]; then
    #直接输入sudo密码
    echo "yourpassword"|sudo -S sysctl -w vm.drop_caches=3
else 
    echo "no"
fi
# -le是小于 ((intstr+3)),将数字字符串转化为数字,$((memoryused -le 0))应该也可以
-lt,小于
-le,小于等于
-eq,等于
-ge,大于等于
-gt,大于
-ne,不等于

grep

统计每个文件中出现的次数

# grep -l baidu *.*  列出出现baidu的文件
# grep -c baidu *.*  统计每个文件出现baidu的次数
列出出现baidu的文件及其次数
grep -l baidu *.*|xargs grep -c baidu

curl

curl忽略https证书验证,加上-k参数

sed

sed一般都是sed s/aa/zz/g。但是遇到要替换的是/,那么/可以换成别的符号。。#,%啊都可以。。

案例

批量重命名文件 删除特定字符


# echo 输出查看结果  实际使用换成mv
ls -1 |while read line;do newName=`echo $line|sed 's/[-,_,,副本,\s\(][\s]*[^\.]*//g'`;echo $line $newName;done;

# 以上代码用于练习,一般使用rename更方便
# 按照man上面的注解,rename的语法格式是:rename from to file
# 这个命令有三个参数,分别是from : 修改什么名字,to:改成什么名字,file 需要修改的文件是哪些。
# 注意,perl版本的rename只有两个参数,第一个参数为perl正则表达式,第二个参数为所要处理的文件
    原文作者:今夕何夕_walker
    原文地址: https://www.jianshu.com/p/425c962c8b35
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞