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正则表达式,第二个参数为所要处理的文件