Linux sed 和 awk 的用法

Linux · 2023-03-26

Linux sed 和 awk 的用法

sed

sed [-nefri] [操作]        

常用选项:

  • -n∶使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的资料一般都会被列出到萤幕上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
  • -e∶直接在指令列模式上进行 sed 的动作编辑;
  • -f∶直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的sed 动作;
  • -r∶sed 的动作支援的是延伸型正规表示法的语法。(预设是基础正规表示法语法)
  • -i∶直接修改读取的档案内容,而不是由萤幕输出。

常用命令:

  • a ∶新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
  • c ∶取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
  • d ∶删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
  • i ∶插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
  • p ∶列印,亦即将某个选择的资料印出。通常 p 会与参数 sed -n 一起运作~
  • s ∶取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!

范例: 将/etc/passwd 中内容打印 并 显示行号,同时删除2~5行
nl /etc/passwd | sed '2,5d' d 是 删除操作

若要删除到最后一行 则是 nl /etc/passwd | sed '2,$d'

若是 要在第二行 后添加 nl /etc/passwd | sed '2a drink tea' 2: 行号 a: 添加

nl /etc/passwd | sed '2i drink tea' 在第二行 前插入 drink tea

整行替换 nl /etc/passwd | sed '2,5c drink tea' 第二行至第五行 替换为 drink tea

列出 10~20行 head -n 20 | tail -n 10 可用sed替换 nl /etc/passwd | sed '2,5p' 2~5行重复。 使用 -n 安静模式 nl /etc/passwd | sed -n '2,5p'

sed 还可以以行为单位进行部分数据查找替换 sed 's/要被替换字符/新的字符/g'

筛选IP: ip addr | grep 'scope host lo' | sed 's/inet //g' | sed 's/\/.*//g

危险操作 直接修改文件

    
    nl /etc/passwd > test.txt  # 将数据重定向到test.txt
    sed -i '$a drink tea' test.txt # 在 test.txt 文件后追加文本

awk 好用的数据处理工具(简单用法)

awk 是一个非常棒的数据处理工具,相较于sed常常作用于一整行的操作,awk比较倾向于一行当中分成数个字段来处理。 ---by 鸟哥

awk 通常运行模式是 awk '条件类型1 {操作1} 条件类型2{操作2}...' filename

awk 主要是处理每一行的字段内的数据,而默认的字段分隔符为空格键或TAB键。

    last -n 5 # 取出前5行

读取出ip 账户名

    last -n 5 | awk '{print $1 "\t" $3}'

在awk 的括号内,每一行的每个字段都是由变量名称,那就是$1,$2等变量名称。
$0 代表【一整列数据】 即全部数据

awk 的内置变量

变量名称代表意义
NF每一行$0 所拥有的总字段数
NR目前awk 所处理的第几行数据*
FS目前的分割字符,默认是空格键。

awk 所有操作是单引号 ' 括住的

    last -n t | awk '{print $1 "\t lines: " NR "\t columns: " NF}'

awk 逻辑运算字符

运算单元代表意义
>大于
<小于
>=大于等于
<=小于等于
==等于
!=不等于
假设 要查看/etc/passwd 第三栏小于10一下的数据 并且仅列出账号与第三列
    cat /etc/passwd | awk '{FS=":"} $3 < 10 {print $1 "\t " $3}' # 除第一行外都成功
    cat /etc/passwd | awk 'BEGIN {FS=":"} $3 < 10 {print $1 "\t " $3}' # 使用BEGIN 关键词, 还有END关键词。
awk 还可以帮助我们完成循环计算 这里不多赘述。

awk 高级用法讲述

Theme Jasmine by Kent Liao