Linux三剑客与管道符

241 阅读4分钟

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行开始的后面全部信息