grep: 过滤文本内容
1、grep root test.txt
注释:过滤出test.txt文件中含有root的整行
2、grep -n root test.txt
注释:-n表打印出行号,过滤出test.txt文件中含有root的整行并加上行号
3、grep -o root test.txt
注释: -o表示仅打印出想要的内容,过滤出test.txt文件中root内容
4、grep -on root test.txt
注释:-on,仅打印出想要的内容并打印所在的行号,过滤出test.txt文件中root,并打印root所在的行号
5、grep -v root test.txt
注释: -v表示不包含查找内容的行,过滤出test.txt文件中不包含root的行
6、grep -vn root test.txt
注释:过滤出test.txt文件中不包含root的行,并打印出行号
7、grep -E 'root|rator' /etc/passwd
注释:-E 可匹配root|rator多个正则表达式
8、grep -n -A 2 'root' /etc/passwd
注释:-A 查找关键字的下几行,要查找的root下2行内容
9、grep -n -B 2 'root' /etc/passwd
注释:-B 查找关键字的上面几行,查找的root行上2行内容
10、grep -nC 1 'root' /etc/passwd
注释:-C 查找关键字的上下各打印一行,查找root行的上下各一行
11、grep -r 'root' /etc
注释:-r (递归搜索)查找目录下包含要查找关键字的任意文件,查找etc目录下所有包含root的文件,打印详细信息
12、grep -rl 'root' /etc
注释:-rl 查找目录下包含查找关键字的文件,查找etc目录下所有包含root的文件,仅打印文件名
13、ping ceshiren.com | grep --line-buffered '11' | awk '{print$0}'
注释:--line-buffered 将动态值传给下一个命令,ping ceshiren.com为动态获取了,为了把这样的动态值传给awk '{print$0}',故在grep命令处,加上参数--line-buffered
14、 grep '^root' /etc/passwd
注释:^ 匹配行首,在etc/passwd文件中查找root在最前的一行
15、grep 'bash$' /etc/passwd
注释:$ 匹配行尾,在etc/passwd文件中查找root在后的一行
16、grep 'lg[0-9]' /etc/passwd
注释: [0-9] 0-9区间任意字符,查询etc/passwd文件中,lg开始后跟着0-9之间任意一个字符的内容
17、grep 'r[a-z]t' /etc/passwd
注释:[a-z] a-z区间任意字母,查询etc/passwd文件中,r和t之间有a-z中任意字符的内容
sed:是一种流编辑器,一次处理一行内容(修改文件内容)
1、sed -e '4 a newline' test.txt
注释:当只有一个过滤条件时,-e可加可不加,a 表示新增add,在test.txt文件中第4行后新增加一行newline
2、 sed -e 's/root/ROOT/g' -e 's/bash/BASH/g' /etc/passwd | head -1
注释:当有多个过滤条件是,每个条件前都要加-e
2、sed '2 i new' test.txt
注释:i表示插入,在test.txt文件中第2行位置插入new
3、sed 's/root/hello/' test.txt
注释:s表示搜索替换,在test.txt文件中,将每一行的首个root替换为hello
4、sed 's/root/hello/g' test.txt
注释:s表示搜索替换,g表示全局,在test.txt文件中,将所有的root替换为hello,未真实修改原文件
5、sed -i 's/root/hello/g' test.txt
注释:-i真实修改原文件,在test.txt文件中,将所有的root替换为hello,真实修改原文件
6、sed '/echo/d' test1.sh
注释:删除test1.sh文件中带有echo的行
7、 sed '/bin/p' test1.sh
注释:p打印,再打印出一行test1.sh文件中带有bin的行
8、 echo '1234abcd5678efgh' | sed -E 's#([0-9])([a-z]).#\1 \2#'
注释:分组匹配与字段提取
awk :把文件逐行读入,以空格为默认分隔符将每行切片,切开的部分再进行后续处理
1、awk -F : '/390/{print$0}' debug.log
注释:-F : 指定 : 为分隔符,print$0 表示打印全部列,打印debug.log中含有390的全部列
2、awk -F : '/390/{print$1}' debug.log
注释:print$1,打印行中包含390,以:为分隔符,打印第1列
3、awk -F : 'NR==2{print$0}' test.txt
注释:NR表示已读的记录数,既行数,查找test.txt文件中第2行全部内容
4、 awk -F : 'NR==2{print$1}' test.txt
注释:查找test.txt文件中第2行中的第1列内容
5、awk -F : 'NF=2{print$0}' test.txt
注释:NF浏览记录的域的个数,既列数,查找test.txt文件中前2列的全部内容
6、awk -F : 'BEGIN{pirnt"BEGIN,BEGIN"}{print$0}' test.txt
注释:打印test.txt文件中所有内容,并在全部内容第一行加上BEGIN,BEGIN
7、 awk 'BEGIN{RS=":"}{print$0}' test.txt
注释:RS自定义行分隔符,自定义分隔符为:,以:为分隔符,打印出所有内容,分隔符处换行展示
8、 echo 'ping root hello' | awk 'BEGIN{var=1}/root/{print $2}END{print var}'
注释:BEGIN 定义一个变量,END输出变量,出入含有root的行中第2列内容
9、 cat -n /etc/passwd | awk -F : 'NR==2'
注释:cat -n 打印出行号,NR==2,第2行的内容
10、 cat -n /etc/passwd | awk -F : 'NR<=3'
注释:打印出行号小于等于3的行
11、ping ceshiren.com | awk '{print $0;fflush()}' | grep '12'
注释:awk当前面的命令是动态获取的时,需要加上fflush()函数,awk后面的命令才能获取到值
12、echo '1@3#56' | awk -F '@|#' '{print $3}'
注释:使用-F 指定多个分隔符,分别为 @、#
13、echo '1@3#45' | awk 'BEGIN{FS="@|#"}{print $2}'
注释:还可以使用BEGIN{FS="@"}指定多的分隔符,打印出分隔后第2列的内容
14、 cat /etc/passwd | head -1 | awk -F : '{print $NF}'
注释:awk{}内的NF,意为打印出最后一列,打印etc/passwd文件中第一行的最后一列
15、 cat /etc/passwd | head -1 | awk -F : '{print $(NF-1)}'
注释:awk{}内的NF,意为打印出最后一列,打印etc/passwd文件中第一行的倒数第二列
16、 echo ¥PATH | awk 'BEGIN{RS=":"}{print NR,$0}'
注释:awk 中使用RS作为分隔符,前面打印NR行数,打印出全部分隔行数后的内容
17、 awk 'BEGIN{ORS="|"}{print $0}' test1.sh
注释:awk中ORS使多行组合为单行,将test1.sh中,多行内容组合为单行
18、tail -f 文件名
动态的展示日志显示信息
19、tail -n 20 文件名
获取文件后20行信息
20、tail -n +20 文件名
获取从第20行开始的后面全部信息