linux三剑客grep、sed、awk

本文详细介绍了Linux中用于文本过滤和处理的三个重要工具:grep用于文件过滤,sed是流编辑器,awk则用于生成文本报告和格式化文本。文章涵盖了这些命令的基本用法,如grep的-i,-o,-v选项,sed的-n,-i,-e选项及a,d,s内置命令,以及awk的字段处理和模式匹配功能。此外,还提供了实例展示如何使用这些工具进行数据查找与替换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

grep:文件过滤工具

sed:流编辑器,操作、过滤、转换文件内容

awk:Linux的文本报告生成器(格式化文本)

^$代表空行(起始符   后面跟着   结束符)
.代表任意一个且只有一个字符
.*匹配所有内容
[^abc]与[abc]相反,匹配除a或b或c外的 任意字符
匹配前面一个字符0次 或 1次
a{n,m}匹配前一个字符最少n次,最多m次

Linux grep 命令

grep [options] [pattern] file

        -i: ignorecase,忽略字符的大小写

        -o: 仅显示匹配到的字符串本身

        -v: --invert-match 显示不能被模式匹配到的行

        -E: 支持使用扩展的正则表达式元字符

        -q: --quiet, --silent 静默模式,即不输出任何信息

        -c: 只统计匹配的行数

        --color=auto: 为grep过滤结果添加颜色

        -n: 显示所在的行号

grep '^ a' text.txt -i -v |  grep '^$' -v    
#去除以a或A开头的行或空行


grep -E 'g(oo|la)d' text.txt -c
#统计 包括good或glad的 行数

Linux sed 命令

sed [options] [sed内置命令字符] file

    选项:

        -n: --quiet或--silent,仅显示script处理后的结果,常与sed内置命令p一起用

        -i: 直接将修改结果写入文件,(不用-i,修改的是内存数据)

        -e: 多次编辑,不需要管道符

        -r: 支持正则扩展

  sed内置命令字符:

        a: append,对文本追加,在指定行后添加一行/多行文本

        d: Delete,删除匹配行

        i: insert,表示插入文本,在指定行前添加一行/多行文本

        p: print,打印匹配行的内容,通常p与-n一起用

        s/正则表达式/替换内容/g:匹配正则内容,然后替换内容。结尾g代表全局匹配

sed匹配范围:

        空地址:全文处理

        范围区间:10,20p  十行到二十行 ,  /pattern1/,/pattern2/         

        步长: 1~2,表示1、3、5、7...行     2~2,表示2、4、6、8...行

sed "2,5p" text.txt -n
#筛选第2行到第5行的数据 (-n)只显示找到的部分

sed "2,5d" text.txt -i
#删除第2行到第5行的数据,(-i)并写回文件

sed "2a some_need_appended_words" text.txt -i
#在第2行后添加文字some_need_appended_words,(-i)并写回文件

sed "2c some_need_replaced_words" text.txt -i
#在第2行替换为文字some_need_replaced_words,(-i)并写回文件

搜索:
     sed -n '/oo/p' text.txt  数据的搜寻并显示
     sed -n '/oo/d' text.txt  数据的搜寻并删除
     sed -n '/oo/{s/oo/kk/;p;q}'    text.txt  数据的搜寻并执行命令


数据的查找与替换
    sed 's/要被取代的字串/新的字串/g'   text.txt

Linux awk 命令

awk [选项参数] 'script' var=value file(s)
或
awk [选项参数] -f scriptfile var=value file(s)

把行的信息按照特定的分隔符进行分割,然后按照pattern进行对应的action。

awk '{[pattern] action}' {filenames}   # 行匹配语句 awk '' 只能用单引号
$n当前记录的第n个字段,字段间由FS分隔
$0完整的输入记录        
NF一条记录的字段的数目
NR已经读出的记录数,就是行号,从1开始

# 每行按空格或TAB分割,输出文本中的1、4项
 $ awk '{print $1,$4}' log.txt
# 格式化输出(如 宽度为几个字节)
 $ awk '{printf "%-8s %-10s\n",$1,$4}' log.txt

# 输出第二列包含 "th",并打印第二列与第四列
 $ awk '$2 ~ /th/ {print $2,$4}' log.txt

# 过滤第一列大于2并且第二列等于'Are'的行
 $ awk '$1>2 && $2=="Are" {print $1,$2,$3}' log.txt    #命令

echo "input start number:"
read start_number
#
for file in `ls`; 
  do   
       if [ "${file:21:3}" = "tar" ] && [ "${start_number}" -lt ${file:8:3} ] ;
            then 
		c=${file:8:3};echo ${c};
                 mkdir ${file:8:3}
                 tar -xzf ${file} -C ${file:8:3};
		 grep MessageType ./${c}/*
               fi; 
  done

       

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值