uniq (检测 相邻行的 重复行) 常和sort连用
-c, --count //在每行前加上表示相应行目出现次数的前缀编号
-d, --repeated //只显示重复的
-u, --unique // 只显示不重复的
-D, --all-repeated // 打印所有重复行
-i, --ignore-case //不区分大小写
-f, --skip-fields=N //-f 忽略的段数,-f 1 忽略第一段
-s, --skip-chars=N //根-f有点像,不过-s是忽略,后面多少个字符 -s 5就忽略后面5个字符
sort
-u 它的作用很简单,就是在输出行中去除重复行
-o 把结果输出到源文件
-n 指明以数值来排序
-r 默认升序,降序
-t 指明分隔符号
-k 指明使用哪一列 排序
例如:
文件date.txt如下:
2017-01-09
2017-01-09
2017-04-24
2017-10-23
2017-12-02
sort -u -nr -k 2 -t '-' -o out.txt
grep
-c 计数
-E 拓展的正则表达式(位置锚定、匹配次数)
-i 忽略大小写
-l 列出文件名
-n 列出行号
-v 显示不匹配
-o 仅显示匹配到的字符串
下面是grep里正则匹配的要点:
[:digit:] [:lower:] [:upper:] [:alpha:] [:alnum:] [:punct:] [:space:]
匹配次数:用在要指定次数的字符后面,用于指定前面的字符要出现的次数,默认工作在贪婪模式
* :匹配前面的字符任意次,包括0次
.* :任意长度的任意字符
\? :匹配其前面的字符0或1次
\+ :匹配其前面的字符至少1次,但不需要紧随在第一次后面
\{m\} :匹配前面的字符m次
\{m,n\} :匹配前面的字符至少m次,至多n次
\{,n\} :匹配前面的字符至多n次
<=n次
\{m,\} :匹配前面的字符至少m次
位置锚定:定位出现的位置
^ :行首锚定,用于模式的最左侧
$ :行尾锚定,用于模式的最右侧
^PATTERN$: 用于模式匹配整行
^$: 空行
^[[:space:]]*$ :空白行或包含tab字符的行
\< 或 \b :词首锚定,用于单词模式的左侧
\> 或 \b :词尾锚定;用于单词模式的右侧
注意:在grep中,字母和数字的组合也被视为单词
\<PATTERN\>:锚定以PATTERN表达式做为单词的行
例子:
1、显示/etc/passwd 文件中不以/bin/bash 结尾的行
grep -v "/bin/bash$" /etc/passwd
2 、显示用户rpc 默认的shell 程序
grep "^rpc\>" /etc/passwd | cut -d: -f7
3 、找出/etc/passwd 中的两位或三位数
grep -E "\<[0-9]{2,3}\>" /etc/passwd
4 、找出"netstat -tan" 命令的结果中以'LISTEN' 后跟0 、1或多个空白字符结尾的行
netstat -tan | grep "\<LISTEN[[:space:]]*$"
5、 显示包含ed或者at字符的内容行
cat test.txt |grep -E "ed|at"
awk 格式化文本信息
awk '{pattern + action}' {filenames} 其中 pattern 表示 AWK 在数据中查找的内容,而 action 是在找到匹配内容时所执行的一系列命令
' ' 引用代码块
{} 命令代码块,包含一条或多条命令
-F 指定分隔符
$0 表示整个当前行
$1 每行第一个字段
$2 每行第二个字段
; 多条命令使用分号分隔
NF 当前列num
NR 当前行num
BEGING END awk会先执行BEGIN;然后读取文件,直到所有的记录都读完;最后执行END操作
例子:
awk -F":" '{print $1 $3}' /etc/passwd //$1与$3相连输出,不分隔
awk -F":" '{print $1,$3}' /etc/passwd //多了一个逗号,$1与$3使用空格分隔
awk -F":" '{print $1 " " $3}' /etc/passwd //$1与$3之间手动添加空格分隔
awk -F: '{print $1; print $2}' /etc/passwd //将每一行的前二个字段,分行输出,进一步理解一行一行处理文本
awk -F: 'NF==4 {print }' /etc/passwd //显示只有4个字段的行
awk -F: 'NF>2{print $0}' /etc/passwd //显示每行字段数量大于2的行
awk -F: '{print NR,NF,$NF,"\t",$0}' /etc/passwd //依次打印行号,字段数,最后字段值,制表符,每行内容
同时, awk可以按照正则进行匹配,配上上的,按照格式要求 输出
正则用/reg/框起来
例如:
awk '/^$/{print "this is an empty line"}' /etc/inittab //查找空行,并且输出这是个空行
awk -F: '/^root/{print $1,$NF}' // 查找以root开头的行,并且输出第一个字段、最后一个字段
awk -F: '!/^root/{print $1,$NF}' // 查找不是root开头的行,并且输出第一个字段、最后一个字段
sed 流编辑工具,默认会处理文件的所有行,除非你告诉它不处理哪几行,适合处理大数据文件
sed [选项] [定址commands] [inputfile]
p 打印行
n 关闭默认输出,默认将自动打印所有行。一般来讲 -n 和 p连用,才能把满足要求的行打印
d 删除行
s 替换
n替换第几个匹内容
w另存为
a 之后添加一行
i 当前行之前插入文本
y 替换匹配内容
e 多点编辑
r 正则 正则用/reg/框起来
sed -n -r '/^([0-9]{3}-|\([0-9]{3}\) )[0-9]{3}-[0-9]{4}$/p' file.txt 输出满足这个正则的行
sed -e '1,3s/my/your/g' -e '3,$s/This/That/g' my.txt // 将第一行-第三行中,所有的my替换成your, This替换成That
sed "3,6s/my/your/g" pets.txt // 只替换第3到第6行的文本
sed 's/s/S/3g' my.txt //替换每一行的第3个以后的
sed 's/s/S/2' my.txt //替换每一行的第二个s
cut
使用说明:
cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。
如果不指定 File 参数,cut 命令将读取标准输入。必须指定 -b、-c 或 -f 标志之一。
参数:
-b :以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。
-n :取消分割多字节字符。仅和 -b 标志一起使用。如果字符的最后一个字节落在由 -b 标志的 List 参数指示的
范围之内,该字符将被写出;否则,该字符将被排除
-c :以字符为单位进行分割。
-d :自定义分隔符,默认为制表符。
-f :与-d一起使用,指定显示哪个区域。例如: cat /etc/password | cut -d : -f 1
网友评论