文章目录
linux shell脚本攻略第2章(一)
cat
-
cat file1 file2 file3 ... filen
。将文件1-n的内容打印出来。 -
cat -s file
。将file中多行空白行变成一行。 -
cat -T file
。将file的制表符显示为^|
。 -
cat -n file
。显示行号。
script
script
用来录制终端命令,参数如下所示:
参数 | 意义 |
---|---|
-t | 指明输出录制的时间数据 |
-f | 如果需要在输出到日志文件的同时,也可以查看日志文件的内容,可以使用 -f 参数。PS:可以用于教学,两个命令行接-f可以实时演示 |
-a | 输出录制的文件,在现有内容上追加新的内容 |
-q | 可以使script命令以静默模式运行 |
scrpitreplay
回放script
命令录制的终端命令。
find
- 要列出当前目录及子目录下所有的文件和文件夹。
find base_path
,将路径bash_path下的所有文件列出来。 - 根据文件名或正则表达式进行搜索。
find path -name "fileReg"
来查找和fileReg正则匹配的结果。也可以使用-iname
忽略大小写。 -
find path -path "path"
通过path来查找相应文件目录。 -
find path -regex "Reg"
通过正则表达式Reg来查找相应内容。 -
!
来否定。 -
-maxdepth
指定最大搜索深度,-mindepth
指定最小搜索深度。 -
type
指定要查找的文件类型。 - 还可以指定要查找文件时间和大小以及权限等。
- 删除匹配到的文件。
-delete
。
xargs
-
cat file | xargs
将文件中所有数据单行输出。 -
cat file | xargs -n 3
将文件中所有数据按照每行三个数据输出。 -
cat file | xargs id char
将char作为分割符对文件file进行输出。
tr
tr只能通过stdin而无法通过命令行参数来接受输入,将来自stdin的输入字符从前一个字符集映射到后一个字符集。
-
tr str1 str2
,将所有的str1转换为str2. -
tr -d str
,删除所有的str。 -
tr -d -c str
,删除所有不在str集合中的所有元素。 -
tr -s str
,删除重复的str。 - tr也可以像集合一样使用各种不同的字符类,使用方式为
tr [:class:] [:class:]
。字符类如下所示。
字符 | 意义 |
---|---|
alnum | 字母与数字 |
alpha | 字母 |
cntrl | 控制字符 |
digit | 数字 |
graph | 图形字符 |
lower | 小写字母 |
upper | 大写字母 |
打印字符 | |
punct | 标点符号 |
space | 空白字符 |
xdigit | 十六进制字符 |
校验
md5sum
md5sum fileName
计算文件名为fileName的文件的md5sum值。
-
md5sum file1 file2 file3 ...
分别计算file1,file2,file3等文件的md5值。 -
md5sum -c file.md5
验证md5是否正确。
sha1sum
sha1sum用法与md5sum一样。
md5deep和sha1deep
md5deep -rl directory > file
递归计算文件的md5值。
gpg
-
gpg -c filename
将文件进行加密,生成新的加密文件,然后通过gpg filename.gpg
进行解密文件,就能提取出加密的文件。
base64
- 通过
base64 filename > outputfile
或cat file | base64 > outputfile
将文件编码为Base64格式。 - 通过
base64 -d file > outputfile
或cat base64_file | base64 -d > outputfile
进行解码。
排序
sort
-
sort file1 file2 > sorted.txt
或sort file1.txt file2.txt -o sorted.txt
对file1和file2进行排序并输出到sorted.txt中。 -
sort -n file.txt
按数字顺序进行排序。 -
sort -r file.txt
按反序排序。 -
sort -M file.txt
按照月份进行排序。 -
sort -m sorted1 sorted2
合并两个已排序的文件。 -
sort file | uniq
找出已排序文件中不重复的行。 -
sort -C file
查看file是否已经排序,返回0表示已排序,否则为未排序。 -
sort -k num file
根据第几列数据来对file进行排序。
uniq
uniq用来消除重复的内容,从给定的输入中找出唯一的行。
-
uniq file
,显示文件中未重复的行,如果有重复则只显示一次。 -
uniq -u file
,显示文件中未重复的行,如果有重复则不显示。 -
uniq -c file
,显示文件中每行出现的次数。 -
uniq -d file
,找出文件中重复的行。
临时文件
-
mktemp
创建临时文件,mktemp -d
创建临时目录,mktemp -u
仅仅生成文件名,但不创建文件或目录。 -
mktemp name.XXX
,根据模板进行创建文件。
分割文件
split
-
split -b 10k file
将会把file按照10KB的大小进行分割。
参数如下:
参数 | 意义 |
---|---|
-b | 块大小,即分割后文件的最大大小 |
-d | 以数字为生成文件的后缀 |
-a | 指定后缀长度 |
-l | 按照行进行分割文件 |
csplit
csplit是split的变种,其相应例子如下所示:
csplit server.log /SERVER/ -n 2 -s {*} -f server -b "%02d.log"; rm server00.log
。解析如下:
参数 | 意义 |
---|---|
/SERVER/ | 用来匹配某一行,分割过程从此处开始 |
/[REGEX]/ | 表示文本样式。包括从当前行直到包含"SERVER"的匹配行 |
{*} | 表示根据匹配重复执行分割,直到文件末尾位置。 |
-s | 静默模式 |
-n | 指定分割后的文件名后缀的数字个数 |
-f | 指定分割后文件名前缀 |
-b | 指定后缀格式 |
根据扩展名切分文件名
命令 | 意义 |
---|---|
${file%*.} | 获取文件的前缀名(最前面的一个点之前的名称) |
${file%%*.} | 获取文件的前缀名(最后面一个点之前的名称) |
${file#*.} | 获取文件后缀名(最前面一个点之后的名称) |
${file##*.} | 获取文件后缀名(最后面一个点之后的名称) |
批量重命名和移动
rename
-
mv file1 file2
,通过mv命令可以代替大部分rename命令,将文件file1更名为file2。 -
rename 's/reg1/reg2/g' *
将文件中的所有reg1替换成reg2。
拼写检查和词典操作
aspell
aspell list
当给定输入不是个词典单词时,会产生输出文本,反之不产生任何输出。