grep

--color=auto 或者 --color 表示对匹配到的文本着色显示
-i 在搜索时忽略大小写
-n 显示结果所在行号
-c 统计匹配到的行数,注意,是匹配到的总行数,不是匹配的次数
-o 只显示符合条件的字符串,但是不整行显示,每个符合条件的字符串单独显示一行
-v 输出不带关键字的行
-w 匹配整个单词,如果是字符串中包含这个单词,则不做匹配
-Ax 在输出的时候包含结果所在行之后的指定行数,这里指之后的x行 after
-Bx 在输出的时候包含结果所在行之前的指定行数,这里指之前的x行 before
-Cx 在输出的时候包含结果所在行之前和之后的指定行数,这里指之前和之后的x行,context
-e 实现多个选项的匹配,逻辑or关系
-q 静默匹配,不输出任何信息,当我们需要知道时候匹配到内容是,echo $?,输出0表示匹配到1表示没有匹配到
-P 表示使用兼容的perl的正则引擎

sed

sed -n '3p' data p 只打印第三行
sed -n '100,200p' data p 只打印100到200行
sed '2,5d' data d 删除第2到第5行
sed '/My/,/You/d' data d 删除包含‘My’的行到包含‘You’的行之间的行
sed '/My/,10d data d 删除包含‘my‘的行到第十行的内容
sed '/my/p' data p 先打印所有,再打印匹配到的行
sed -n '/my/p' data p 取消sed的默认打印,只打印匹配到的行
sed '$d' data d 删除最后一行
sed '/my/d' data d 删除包含my的行
sed 's/My/You/g' data s 替换 g表示全局替换,替换My为You
sed -e '1,10d' -e 's/My/Your/g' data 多个命令用-e隔开
sed '/My/r introduce.txt' data r 读取 如果在文件data的某一行匹配到My,就在该行后面插入文件txt的内容
sed -n '/My/w me.txt' data w 写入 如果在文件data的某一行匹配到My,就将这行写入到txt文件中
sed '/My'/a\

hello' data a 追加,在匹配到的行后面追加hello
sed '/My'/i
hello' data i 插入,在匹配到的行前面追加hello
sed '3c
hello' data c 修改,在将匹配的行内容更改成hello
sed 'y/abC/ABc' y 把所有小写的a转换成A,小写的b转换成B,大写的C转换成c

awk

awk -v FS='#' -v OFS='---' '{print $1,$2}' test 用#分隔字符,用---打印字符
内置变量:
FS 输入字段分隔符,默认为空白字符
OFS 输出字段分隔符,默认为空白字符
RS 输入记录分隔符,指定输入时的换行符
ORS 输出记录分隔符,输出时用指定符号替换换行符
NF 当前行的字段的个数,字段数量
NR 当前处理的文本号的行号
FNR 各文件分别计数的行号
FILENAME 当前文件名
ARGC 命令行参数的个数
ARGV 数组,保存的是命令行所给定的各参数

awk 'NR5 {print $0}' test 打印第五行的内容
x < y 小于
x<=y 小于等于
x
y 等于
x!=y 不等于
x>=y 大等于
x>y 大于
x ~ /正则/ 正则匹配正确
x! ~ /正则/ 正则匹配不正确
--re-interval / --posix 拓展正则匹配

awk '/a/,/b/ {print $0}' data 打印匹配到a的行和匹配到b的行,之间的行,行范围模式
awk -F ":" '{ if($3 < 500) {print $1,"系统用户"} else {print $1,"普通用户"}}' /etc/passwd
小于500打印为系统用户,否则打印为普通用户

awk 'i=!i' data 打印奇数行
awk '{ if(NR==2){next}; print $0}' data 不打印第二行的数据