bash 脚本。find 命令,xargs,awk,sed
一、rm 排除指定文件或文件夹
rm -ri !(.git) // 有些系统不支持,勿轻易尝试 ls -a | grep -v '^\.git' |xargs rm -rf // 通过管道流直接操作
操作特殊字符 --
rm -rf -- -r.txt
二、find <指定目录> <指定条件> <指定动作>
$ find . -name 'my*' -ls
搜索当前目录中,所有文件名以my开头的文件,并显示它们的详细信息。
find /etc -name "*.conf" find /etc ! -name "*.conf" find /etc -type d
b - 块设备文件。 d - 目录。 c - 字符设备文件。 p - 管道文件。 l - 符号链接文件。 f - 普通文件。
三、cut -d {分隔符} -f{第几个}
find *.rmvb | cut -d"." -f1
输出 rmvb 扩展的文件名
四、xargs
作用:将标准输入转为命令行参数。因为某些命令不支持从标准输入读取参数,比如 rm
find -name hello* | rm
此时可以使用 xargs 主动将标准输入转换为命令行参数。xargs
以换行符和空格作为分隔符,可以把标准输入分解成一个个命令行参数(直接接在后续命令参数的后面
ls *.txt | xargs rm -rf echo "one two three" | xargs mkdir # -p参数打印出要执行的命令,询问用户是否要执行 find -name "hello*" | xargs -p rm -rf # -i 将参数替换为 {} ls | xargs -t -i mv {} {}.bak # -I File 将参数替换为指定参数名称 File ls | xargs -t -I File mv File File.bak
-n1 用于将原来以空格分隔的参数变成以一行一个的参数。
ls *.tar.gz | xargs -n1 tar xzvf
-d 用于指定分隔符
$ echo -e "a\tb\tc" | xargs -d "\t" echo a b c
五、grep (global search regular expression(RE) and print out the line
使用正则表达式搜索文本,并把匹配的行打印出来。
grep pattern [file...]
① grep 可以接受"标准输入"(stdin)作为参数。
如通过管道对 ls -l输出的内容过滤,只显示以 a 开头的行(因为 “|” 是管道符,可以将一个命令的标准输出管道为另外一个命令的标准输入)
ls -l | grep '^a'
或者使用 - 作为参数,直接从标准输入中读取数据
$ grep hello - hello java
② 使用命令行参数。可用于在多个文件中过滤文本
# 显示在 aa,bb,cc 文件中匹配 test的行 grep 'test' aa bb cc # xargs 用于将管道流的标准输入转换成命令行参数 find . -name "*.txt" | xargs grep "abc"
③ grep -v 排除选择(invert-match)。过滤不以 a开头的行。
ls -l | grep -v '^a'
④ grep -e 排除特殊字符
grep --help |grep -e -v
六、循环遍历
普通循环
for((i=1;i<=10;i++)); do echo $(expr $i \* 3 + 1); done
for in 循环
for i in {1..100..2} do echo $i done
或者
for i in $(seq 1 10) do echo $(expr $i \* 3 + 1); done
for in 遍历数组
items=$(ls /etc/systemd/system/h-*) for i in ${items[@]} do service=$(basename $i) ( set -x; systemctl restart $service ) done
七、cat 命令
写入文件
cat <<EOF >hello.txt hello java EOF
八、awk 命令
全局替换文件中的字符串
awk '{ gsub(/AAAA/,"BBBB"); print $0 }' t.txt
替换后并写入
gawk -i inplace '{ gsub(/AAA/, "BBB") }; { print }' h-*
九、sed 命令
全局替换
sed "s/AAAA/BBBB/g" h-im.service
全局替换并写入
sed -i "s/AAAA/BBBB/g" h-im.service
十、nmap 命令
sudo nmap -v -Pn -O 192.168.1.1/24
end