一、sort
sort 对行内容进行升序排序
XXX | sort 选项 sort 选项 文件
-n 按照数组进行排序
-r 反向排序
-u 排序后去重
-t '字段分隔符' -k 字段序号 根据-t指定的分隔符的第k个字段进行排序
二、uniq
uniq 对连续的重复行进行去重
XXX | uniq 选项 uniq 选项 文件
-c 对连续的重复行进行去重,并统计重复次数
-d 仅输出连续重复的行
-u 仅输出不连续重复的行
三、tr
tr 对输入的内容进行替换
XXX | tr 选项 '参数1' ['参数2']
-t tr命令的默认选项,使用 参数2 的字符替换成 参数1 的字符
-c 仅保留 参数1 的字符,其它字符(包括\n)都替换成 参数2 的字符
-s 根据 参数1 进行去重,如果有 参数2 则再用 参数2 的字符替换 参数1 的字符
-d 删除所有 参数1 的字符
删除空行 cat 文件 | grep -v "^$"
cat 文件 | tr -s "\n"
Windows的另起一行格式(\r\n)转换成 Linux的另起一行格式(\n) cat 文件 | tr -d '\r' > 新文件
dos2unix 文件
四、对数组排序
echo ${数组名[@]} | tr ' ' '\n' | sort -rn | tr '\n' ' '
五、cut
cut 对行内容进行字段截取
XXX | cut 选项 参数
-d '分隔符' -f 字段序号 根据 -d 指定的分隔符的截取显示 -f 指定的字段
--complement 取反,不显示 -f 指定的字段
--output-delimiter '分隔符' 指定输出的字段分隔符
字符串分片 echo ${变量:下标:长度} #下标起始从0开始
echo $变量 | cut -b 起始下标-终止下标 #下标起始从1开始
expr substr $变量 起始下标 长度 #下标起始从1开始
七、split
split 按照格式拆分文件
-l 根据行数分割文件
-b 根据大小分割文件
-d 输出的目标文件后缀用数字替代
如何将一个10G文件分割为10个1G的文件 split -b 1G -d 原文件 目标文件名前缀
如何将一个100行文件分割为10个10行的文件 split -l 10 -d 原文件 目标文件名前缀
paste 将多个文件按照列进行合并
paste 选项 文件1 文件2 ...
-d '分隔符' 指定输出的字段分隔符
-s 将每个列横向输出
合并文件的行 cat 文件1 文件2 ... > 新文件
合并文件的列 paste -d '分隔符' 文件1 文件2 ... > 新文件
eval 在命令行执行前,先将命令行里的变量置换成对应的值后,再执行命令
a=100
b=a
eval echo \$$b 置换成--> echo $a 执行-> 100
eval $b=50 置换成--> a=50 执行
echo $a -> 50
通配符 作用范围 匹配文件/目录名
正则表达式 作用范围 匹配文件内容
正则表达式元字符
基础元字符
\ 转义字符,将一些特殊符号转义成普通字符 \? \! \\ 将一些普遍字母字符转义成特殊字符 \n \t \r
^ 匹配以指定字符串开头的 ^XXX
$ 匹配以指定字符串结尾的 XXX$ ^$
. 代表除了 \n 以外的任意字符
[XXX] 匹配中括号里的列表中的任意一个字符 [.\n] [0-9] [a-zA-Z0-9]
[^XXX] 匹配除了中括号里的列表中的任何字符 [^0-9]匹配所有非数字的字符 [^a-zA-Z]匹配所有非大小字母的字符
* 匹配*前面的字符或表达式任意次数(包括0次 1次或多次) .* [0-9]*
{n} 匹配{}前面的字符或表达式 n 次
{n,} 匹配{}前面的字符或表达式至少 n 次(大于等于 n 次)
{n,m} 匹配{}前面的字符或表达式 n 到 m 次(大于等于 n 次且小于等于 m 次)
(注:grep sed 使用时 {} 前面要加 \ ;egep awk grep -E sed -r 使用时 {} 前面不用加 \)
扩展元字符
+ 匹配+前面的字符或表达式至少1次(大于等于1次 {1,})
? 匹配?前面的字符或表达式0次或1次({0,1})
() 将()里的表达式作为一个整体 (oo)* (oo)?
| 或 (oo|aa) (oo|aa)?