linux shell 脚本攻略第3版 读书笔记

第2章

1shell会扩展没有引号或是出现在双引号(")中
的通配符。单引号能够阻止shell扩展*.txt,使得该字符串能够原封不动地传给find命令。

2find 命令 如果需要用到正则表达式使用单引号''
例如:查找/home/slynux下面 所有以txt结尾的文件并打印出来
find /home/slynux -name '*.txt' -print

find命令有一个选项-iname(忽略字母大小写)

3–newer选项可以指定一个用于比较修改时间的参考文件,然后找出比参考文件更新的(更
近的修改时间)所有文件。

例如,找出比file.txt修改时间更近的所有文件:
$ find . -type f -newer file.txt -print
find命令的时间戳处理选项有助于编写系统备份和维护脚本。

你必须以root用户的身份执行find命令才能够更改文件或目录的所有权。


4下列命令可以将10天前的 .txt文件复制到OLD目录中:
$ find . -type f -mtime +10 -name "*.txt" -exec cp {} OLD \;

5我们无法在-exec选项中直接使用多个命令。该选项只能够接受单个命令,
不过我们可以耍一个小花招。把多个命令写到一个shell 脚本中( 例如
command.sh),然后在-exec中使用这个脚本:
-exec ./commands.sh {} \;

6使用find命令的-print0选项生成以空字符('\0')作为分隔符的输出,然后将其作为
xargs命令的输入。
下列命令会查找并删除所有的.txt文件:
$ find . -type f -name "*.txt" -print0 | xargs -0 rm -f

删除以html结尾的10天前的文件,包括带空格的文件:

find /usr/local/backups -name "*.html" -mtime +10 -print0 |xargs -0 rm -rfv

find /usr/local/backups -mtime +10 -name "*.html" -exec rm -rf {} \;


find -print 和 -print0的区别:

-print 在每一个输出后会添加一个回车换行符,而-print0则不会。

第4章

有一种值得推荐的做法是先使用不带-i选项的sed命令,以确保正则表达式
没有问题,如果结果符合要求,再加入-i选项将更改写入文件。另外,你也可
以使用下列形式的sed:
sed -i.bak 's/abc/def/' file
这时的sed不仅替换文件内容,还会创建一个名为file.bak的文件,其中包含
着原始文件内容的副本。

awk脚本的结构如下:
awk 'BEGIN{ print "start" } pattern { commands } END{ print "end" }' file
awk命令也可以从stdin中读取输入。
awk脚本通常由3部分组成:BEGIN、END和带模式匹配选项的公共语句块(common statement
block)。这3个部分都是可选的,可以不用出现在脚本中。
awk以逐行的形式处理文件。BEGIN之后的命令会先于公共语句块执行。对于匹配PATTERN
的行,awk会对其执行PATTERN之后的命令。最后,在处理完整个文件之后,awk会执行END之后
的命令。

简单的awk脚本可以放在单引号或双引号中:
awk 'BEGIN { statements } { statements } END { end statements }'
或者
awk "BEGIN { statements } { statements } END { end statements }"
下面的命令会输出文件行数:
$ awk 'BEGIN { i=0 } { i++ } END { print i}' filename
或者
$ awk "BEGIN { i=0 } { i++ } END { print i }" filename

 

以下是awk可以使用的一些特殊变量。
 NR:表示记录编号,当awk将行作为记录时,该变量相当于当前行号。
 NF:表示字段数量,在处理当前记录时,相当于字段数量。默认的字段分隔符是空格。
 $0:该变量包含当前记录的文本内容。
 $1:该变量包含第一个字段的文本内容。
 $2:该变量包含第二个字段的文本内容。

awk默认读取文件中的所有行。如果只想读取某一行,可以使用getline函数。

awk、grep和sed都可以根据条件打印部分行。最简单的方法是使用grep打印匹配模式的行。
不过,最全能的工具还是awk。

 

 

 


 

你可能感兴趣的:(linux,运维学习笔记)