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

posted on 2019-06-08 10:21  Lemo_wd  阅读(624)  评论(0编辑  收藏  举报

导航