Linux文本处理命令与sed命令

Linux文本处理命令与sed命令

  • 文本处理命令
  • sed命令

 

一、文本处理命令

  1.sort命令

    sort 命令用于将文本文件内容加以排序

    sort 可针对文本文件的内容,以行为单位来排序

    语法:

sort [参数] [文件名] [-k]
    参数:
    -n # 按照数值的大小排序
    -r # 倒序排列
    -k # 以某列进行排序
    -t # 指定分割符,默认是以空格为分隔符

    使用:

cat 1.txt | sort -n -r -k3 -t '|'
sort  1.txt
sort testfile -k 2

  2.uniq命令

    用于检查及删除文本文件中重复出现的行列,一般与sort命令结合使用

    语法:

uniq [参数] [文件名]
    参数:
    -c # 在每列旁边显示该行重复出现的次数
    -d # 仅显示重复出现的行列
    -u # 仅显示出现一次的行列

    使用:

uniq 1.txt

    注意:当重复的行并不相邻时,uniq 命令是不起作用的,这种情况就可以与sort一同使用

sort  1.txt | uniq

  3.cut命令

    cut命令用来显示行中的指定部分,删除文件中指定字段

    语法:

cut [参数] [文件名]
    参数:
    -d # 指定字段的分隔符,默认的字段分隔符为制表符(TAB)
    -f # 与-d一起使用,显示指定字段的内容

    使用:

cat 1.txt | cut -d '|' -f2  # 1.txt中每行第2个字段

  4.tr命令

    替换或删除命令

    语法:

tr [参数]
    参数:
    -d #删除字符

    使用:

cat 1.txt |tr a-z A-Z  # 将文件1.txt中的小写字母全部转换成大写字母

  5.wc命令

    统计、计算数字

    语法:

wc [参数] [文件名]
    参数:
    -c # 统计文件的Bytes数
    -l # 统计文件的行数
    -w # 统计文件中单词的个数,默认以空白字符作为分隔符

    使用:

wc 1.txt  # 在默认的情况下,wc将计算指定文件的行数、字数,以及字节数
wc 1.txt 2.txt 3.txt  # 统计多个文件的信息

    注意:在Linux系统中,一段连续性的数字或字母组合为一个词

 

二、sed命令

  sed命令是Linux中的流媒体编辑器

grep:过滤文本
sed:修改文本
awk:处理文本

  格式:

sed [参数] '处理规则' [操作对象]
    参数:
    -e # 允许多项编辑
    -n # 取消默认输出
    -i # 就地编辑
    -r # 支持拓展正则
    -f # 指定sed匹配规则脚本文件

  定位:

    1)数字定位法:

      指定行号

sed '3d' 1.txt 
sed '2,3d' 1.txt 

    2)正则定位法:

      指定正则定位

sed '/^g/d' 1.txt

    3)数字和正则定位法:

sed '3,/^g/d' 1.txt

    4)正则正则定位法:

sed '/^g/,/^j/d' 1.txt 

  编辑模式:

    d:删除

    p:打印

    a:在当前行后添加一行或多行

sed '2axxx' 1.txt

    c:用新文本修改(替换)当前行

sed '2cxxx' 1.txt

    i:在当前行之前插入文本(单独使用时)

sed '2ixxx' 4.txt

    r:在文件中读内容

sed '2r r.txt' 1.txt

    w:将指定行写入文件

sed '2w w.txt' 1.txt 

    y:将字符转换成另一个字符

sed '2y/fa/FA/' 1.txt 

    s:将字符串转换成另一个字符串(每一行只替换一次)

sed 's/11/22/' 1.txt

    g:将字符串转换成另一个字符串(全部替换)

sed 's/11/22/g' 1.txt 

    i:忽略大小写(跟s模式一起使用时)

    $:代表前面匹配到的内容

  案例:

    1)将nginx.conf中的注释行全部去掉

[root@localhost ~]# sed '/^ *#/d' /etc/nginx/nginx.conf

    2)将nginx.conf中每一行之前增加注释

[root@localhost ~]# sed 's/.*/# &/g' /etc/nginx/nginx.conf

    3)要求一键修改本机的ip

192.168.15.100 ---> 192.168.15.101
172.16.1.100   ---> 172.16.1.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

 

三、案例

  1.用两种方法实现将文件中以#开头的行把#去掉

sed -r 's/^#//g' /etc/fstab
cat /etc/fstab | tr -d '^#'

  2.将文件中的Hello World替换成World Hello

sed -r 's/Hello World/World Hello/g' 7.txt
awk '{print $2,$1}' 7.txt

  3.删除一个文本中所有的数字

sed -r 's/[0-9]+//g' 8.txt
cat 8.txt | tr -d '[0-9]+'

 

posted @ 2021-12-21 20:56  尤露  阅读(73)  评论(0)    收藏  举报