linux三剑客 grep awk sed

本文详细介绍了Linux中的grep、awk和sed三个重要命令,包括它们的基本用法、参数解释及实例演示。grep主要用于在文件中查找匹配的字符串,awk则用于处理和分析文本,而sed主要用于文本查找、删除和修改替换。通过学习,你可以更有效地进行文本操作和数据分析。

Linux三剑客
Linux三剑客即是:grep查找、awk切片、sed修改
一、grep
grep用于查看文件中符合条件的字符串

1、常用参数:
    -c 或 --count : 计算符合样式的行数。
    -d <动作> 或 --directories=<动作> : 查找目录
    -E 或 --extended-regexp : 将样式为延伸的正则表达式来使用。
    -v 或 --revert-match : 显示不包含匹配文本的所有行。
    -i 或 --ignore-case : 忽略字符大小写的差别。
    -o 或 --only-matching : 只显示匹配PATTERN 部分。
    -A<显示行数> 或 --after-context=<显示行数> : 除了显示符合范本样式的那一列之外,并显示该行之后的内容。
    -B<显示行数> 或 --before-context=<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前的内容。
    -C<显示行数> 或 --context=<显示行数>或-<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前后的内容。
    --line-buffered : grep 会缓存一批数据后再输出,使用--line-buffered使grep不缓存数据。

2、示例:
1)查询1.txt下包含a的行:
cat 1.txt —查看1.txt文件内容(查看文件内容的命令还有:less、more、cat、vi、head、tail),
grep ‘a’ 1.txt --col --查找1.txt中a并且高亮显示,可以看出一共4行,
grep -c ‘a’ 1.txt —计算1.txt中包含a的行数,一共4行,输出4。

2)查询1.txt中包含grep以及前后行
grep -C 1 ‘grep’ 1.txt —使用-C命令,查询包含grep以及前后一行,同理查询前后两行就是grep -C 2 ‘grep’ 1.txt
grep -A 1 ‘grep’ 1.txt —使用-A命令,查询包含grep以及后一行,同理查询后两行就是grep -A 2 ‘grep’ 1.txt
grep -B 1 ‘grep’ 1.txt —使用-B命令,查询包含grep以及前一行,同理查询前两行就是grep -B 2 ‘grep’ 1.txt

3)查询1.txt中不包含a的行 ------- grep -v ‘a’ 1.txt
4)查询1.txt中包含A、a的内容 — grep -i ‘a’ 1.txt 或者 gerp -i ‘A’ 1.txt
5)查询1.txt中的grep字符串并显示匹配内容 — grep -0 ‘grep’ 1.txt
可以与正则一起使用。

6)grep的正则表达式 -E 使用扩展正则表达式。
grep -E ‘user=\w{1,7}’ 1.txt — 查询1.txt中:user=文本或数字1到7个,的行内容
grep -E -o ‘user=\w{1,7}’ 1.txt — 查询1.txt中:user=文本或数字1到7个,只显示符合正则的内容。


二、awk
awk用于处理文本文件、分析文本。

1、常用参数
    -F:指定输入文件折分隔符。
    -v:赋值一个用户定义变量。
    -f :从脚本文件中读取awk命令。

2、awk的内建变量
    $n:前记录的第n个字段,字段间由FS分隔。
    $0:完整的输入记录。
    FS:字段分隔符(默认是空)。
    NF:一条记录的字段数。
    NR:已经独处的记录数,即行号。
    OFS:输入记录分隔符,输出时用指定符合替换分隔符。
    ORS:输出记录分割符。
    RS:记录分割符。

3、两种模式:
    BEGIN:指定处理文本之前需要执行的操作。
    END:指定处理完所有行之后需要执行的操作。

4、示例:
1) awk ‘{print $0}’ test-awk.txt ---- 打印完整的输入记录、文本
awk ‘{print $1}’ test-awk.txt ---- 打印的输入记录、文本的第一行

2)设置变量
awk -va=linux ‘{print $1,$1a}’ test-awk.txt ---- 设置变量a为Linux

3)awk ‘BEGIN{FS="#####"}{print $1,$2}’ test-awk1.txt ---- 默认替换分隔符为空格
awk ‘BEGIN{FS="#####";OFS="----"}{print $1,$2}’ test-awk1.txt ---- 分隔符#####变为----

4)awk ‘BEGIN{RS="#####"}{print $0}’ test-awk1.txt ---- 找到#####分隔符,并把分隔符后面内容在另一行输出
awk ‘BEGIN{ORS="-----"}{print $0}’ test-awk1.txt ----- 把换行符换成-----

5)NR是指awk正在处理的记录位于文件中的位置(行号)
NF是指awk正在处理的记录包含几个域(字段),这于域分隔符有关,默认为空

6)awk ‘/e/{print}’ test-awk1.txt ----- 匹配带e的内容
awk -F ‘#####’ ‘$2~/e/{print}’ test-awk1.txt ----- 以#####为分隔符,匹配第二列中包含e的内容


三、sed
主要作用是查找;新增 删除 和修改替换。

1、常用参数
    -i 表示inplace edit,就地修改文件
    -n 表示仅显示script处理后的结果
    -e 表示运行多次处理
    s 表示替换
    d 表示删除

2、示例
sed -i ‘s#linux#windows#g’ test-awk1.txt ---- 把test-awk1.txt中的Linux改成Windows
sed -i ‘s/^[a-z]*#/test/g’ test-sed.txt ---- 把test-sed.txt中windows#、centos#改成test

2) sed -n ‘3p’ test-awk1.txt ---- 仅打印第三行

3) sed -e ‘1d’ -e ‘s#a#A#g’ test-awk.txt ----- 先删除第一行,然后把a替换成A

sed的其他用法如下:
1、删除行首空格

        sed 's/^[ ]*//g' filename
        sed 's/^ *//g' filename
        sed 's/^[[:space:]]*//g' filename

2、行后和行前添加新内容

    行前:sed -i 's#^#HEAD&#g' filename
    行后:sed -i 's#$#&TAIL#g' filename
    &代表pattern

3、使用变量替换(使用双引号)

     sed -e "s/$var1/$var2/g" filename

4、在第一行前插入文本

     sed -i '1 i\插入字符串' filename

5、在最后一行插入

    sed -i '$ a\插入字符串' filename

6、在匹配行前插入

    sed -i '/pattern/ i "插入字符串"' filename

7、在匹配行后插入

    sed -i '/pattern/ a "插入字符串"' filename

8、删除文本中空行和空格组成的行以及#号注释的行

    grep -v ^# filename | sed /^[[:space:]]*$/d | sed /^$/d

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值