Linux三剑客之sed

image

1. 文本处理命令

# 补充知识点

1. sort命令
默认根据第一个字母排序
    用于将文件内容加以排序
    -n  依照数值的大小排序
    -r  以相反的顺序来排序
    -l  以某列进行排序
    -t  以指定分隔符,默认是以空格为分隔

2. uniq命令
cat xx.txt | uniq
用于检测以及删除文本文件中重复出现的行列,一般与"sort"命令结合使用
# 先排序再去重,不然只会去除相邻的重复的行列
    -c  在每列旁边显示该行重复出现的次数
    -d  仅显示重复出现的行列
    -u  仅显示出现一次的行列

3. cut命令
cat xx.txt | cut -d '|' -f2
cut命令用来显示行中的指定部分,删除文件中的指定字段
    -d  指定字段的分隔符,默认的字段分隔符为"tab"
    -f  显示指定字段的内容-fn

4. tr命令
cat xx.txt | tr 123 345
# 非整体替换,所有的1,2,3替换成3,4,5
替换或删除命令
    -d  删除字符

5. wc命令
wc -l xx.txt
统计,计算数字命令
    -c  统计文件的Bytes数
    -l  统计文件的行数
    -w  统计文件中单词的个数,默认以空白字符作为分隔符
    "注:"在Linux系统中,一段连续的数字或字母组合为一个词。


2. Linux三剑客之sed

sed是Linux中,流媒体编辑器。
stream Editor
grep:用来过滤文本
sed :用来修改文本
awk :用来处理文本

1. "sed格式:"
    sed [参数] "处理规则" [操作对象]

2. "参数:"
    -e  运行多项编辑
    -n  取消默认输出
    # sed -e '3d' -e '6d' -n xx.txt
	
    -i  就地编辑
    # sed -i '5p' 4.txt

    -r  支持拓展正则
    # sed -r '/123/d'  4.txt
	
    -f  指定sed匹配规则脚本文件
    # 文件中定义了匹配规则r.txt
    """
    vim r.txt
    sed -f r.txt  xx.txt
    """

3. "定位:"#(非常重要)
    1. 数字定位法
        指定行号
        sed '3d'  xx.txt  # 3是数字定位法
        sed '2,3d'  xx.txt  # 第二行到第三行

    2. 正则定位法
        指定正则定位
        sed '/g/d'  xx.txt
        sed '/^g/d'  xx.txt
	
    3. 数字和正则定位法
        sed '3,/^g/d'  xx.txt
        # 第三行到以g开头的行都删除

    4. 正则正则定位法
        sed '/^g/,/^j/d'  xx.txt

4. "sed的编辑模式:"
单引号
sed '3d'  xx.txt  # 删除第三行
sed -e '3d' -e '6d' xx.txt 删除3,6行  # 运行多项编辑
    d  删除
    p  打印
    # sed -n '5p'  xx.txt

    a  在某一行后添加一行或多行
    sed '2axxx'  xx.txt  # 在第二行之后添加xxx

    c  用新的文本修改(替换)当前行
    sed '2cxxx'  xx.txt

    i  在当前行之前插入文本
    # 此功能是单独使用时
    sed '2ixxx'  xx.txt

    r  在文件中读内容
    r.txt  -- /123/d
    sed '2r r.txt'  xx.txt

    w  将指定行写入文件
    sed '2w w.txt'  xx.txt

    y  将"字符"转换成另一个"字符"
    sed '2y/f/F'  xx.txt
    # 替换字符,不是替换整体

    s  将字符串转换成另一个字符串
    # 每行只替换一次
    vim xx.txt 123456710111212s1233443
    sed 's/11/22'  xx.txt

    g  全部执行,应用于整行里面的所有内容
    # 是执行,没有单独的替换功能
    sed 's/11/22/g'  xx.txt
 
    i  忽略大小写
    # 与s模式一起使用
    sed 's/f/abc/gi'  xx.txt

    &  代表前面匹配到的内容

3. 案例

1. 将nginx.conf 中的注释行全部去掉
sed '/ *^#/d'  /etc/nginx/nginx.conf

2. 将nginx.conf 中每一行之前增加注释
sed 's/.*/#&/g'  /etc/nginx/nginx.conf

3. 要求一键修改本机的ip
192.168.15.100  -- 192.168.15.101
172.16.2.100  -- 172.16.2.101
sed -i 's#.100#.101#g'  /etc/sysconfig/network-scripts/ifcfg-eth[01]

4. 将/etc/passwd中的root修改成ROOT
sed -i 's/root/ROOT/g'  /etc/passwd

posted @ 2021-12-21 16:23  Joshua_jiaxue  阅读(49)  评论(0编辑  收藏  举报