Shell总结4

本文详细介绍sed流编辑器和awk编程语言的功能与应用。sed用于处理文件,逐行读取并按要求编辑,不修改原文。awk则擅长文本和数据处理,逐行扫描并针对模式行操作。文章涵盖sed的编辑动作、awk的语法结构及内部变量,适合初学者快速掌握。

sed

流编辑器,用来处理文件
一行行读取文件内容,并按照要求进行处理,将结果输出到屏幕。
不会修改原文件
sed两种语法格式 命令行模式,脚本模式

sed 选项 ‘处理动作‘ 文件名
选项
-e 进行多次编辑
-n 取消默认输出
-r 使用扩展正则表达式
-i 原地编辑(修改源文件)
-f 指点sed脚本文件名
处理动作(必须加单引号)
’p’ 打印
‘i’ 在指定行之前插入内容
’a’ 在指定行之后插入内容
‘c’ 替换指定行所有内容
’d’ 删除指定行
‘r’ 读入其他文件
‘w’ 保存
’&‘ 保存查找的串 以便在替换中引用 (= /(/) )
‘=’ 打印行号
‘!’ 对所选行以外行进行操作
‘q’ 退出
命令
sed 's/搜索内容/替换内容/动作’ 文件
sed -n ‘s/123/qwe/gp’ a.txt (123 -> qwe)
sed -n ‘s/123/qwe&/gp’ a.txt (123 -> qwe123)

sed脚本
#!/bin/sed -f
处理动作 (没有引号)
处理动作

sed -f sed.sh a.txt

awk

一种编程语言,用来对文本和数据进行处理,数据可以来自输入,文件,命令输出
逐行扫描文件,寻找匹配的特定模式行进行操作

1 awk将一行作为输入,赋值给$0 以换行符(RS)结束
2 每行以分隔符空格或制表符分解成字段,储存在$1 $2 …
3 print 打印时以空格分隔,$1,$2 之间会有一个逗号,会映射成OFS(默认空格)

  1. 语法结构
    awk 选项 ’命令部分‘ 文件名
    引用变量需要用"" 双引号
    当用选项
    -F 定义字段分割符合 默认是空格
    -v 定义变量并赋值

    命令部分
    1 正则表达式,地址定位
    NR=n 第n行 ’NR1,NR3{awk语句}’ 可以用逻辑运算符|| &&
    2 {awk语句;awk语句;…}
    ‘{print $0;print$1};
    3 BEGIN…END…
    BEGIN 在处理之前操作
    END 在处理之后操作
    ’BEGIN{awk语句};{处理中};END{awk语句}

  2. 脚本编写
    #!/bin/awk -f
    命令部分 (不加引号)
    命令部分

    执行
    1 awk 选项 -f awk.sh 文件
    awk -f sed.sh a.txt
    2 ./awk.sh a.txt

  3. 内部变量
    $0 当前处理行的所有记录
    $1,$2,$3…$n 每行以间隔符分割的不同字段
    NF 当前记录的字段数
    $NF 最后一行
    FNR/NR 行号
    FS 定义间隔符
    OFS 定义输出字段分隔符,默认空格
    RS 输入记录分隔符,默认换行
    ORS 输出记录分隔符,默认换行
    awk ‘BEGIN{FS=":"};{print "姓名是:"1"∗∗∗∗年龄"1"****年龄"1""NF}’ a.txt

print 打印函数 类似echo 会换行
printf 打印函数 类似echo -n 不会换行
%s 字符类型 %d 数值类型 -z左对齐(默认右对齐) \n 换行
{printf “%15s %-10s\n”,$1 $2}

变量定义
	-v 变量名=变量值  (调用时不加$)
	awk -v NUM=3 -F: '{print NUM}' a.txt

运算符
== < > <= >= !=
~ 匹配
!~ 不匹配
!逻辑非
&& 逻辑与
|| 逻辑或

awk ‘NR>=1 && NR<=5 && $0 ~ /^root/{print $0}’ a.txt
awk ‘BEGIN{if() ;else ;}’
awk ‘BEGIN{sum=0;for(i=1;i<=10;i++) (sum+=i)};{print sum}’
awk ‘BEGIN{i=1;while(i<=10) {print i;i++}}’
awk ‘BEGIN(i=1;while(i<=10) {print i;i++}}’ | awk ‘{sum+=$0};END{print sum}’

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值