Linux - sed 文本操作

SED 是一项Linux指令,功能同awk类似,差别在于,sed简单,对列处理的功能要差一些,awk的功能复杂,对列处理的功能比较强大.

 

sed全称是:Stream EDitor
调用sed命令有两种形式:

sed [options] 'command' file(s) sed [options] -f scriptfile file(s)
# 工作模式 先读取资料、存入模式空间、对其进行编辑、再输出、再用下一行替换模式空间内容

 

  sed 常用参数

-n 	 # 输出由编辑指令控制(取消默认的输出,必须与编辑指令一起配合)
-i   # 直接对文件操作
-e   # 多重编辑
-r   # 正则可不转移特殊字符

b    # 跳过匹配的行
p    # 打印
d    # 删除
s    # 替换
g    # 配合s全部替换
i    # 行前插入
a    # 行后插入
r    # 读
y    # 转换
q    # 退出

&    # 代表查找的串内容
*    # 任意多个 前驱字符(前导符)
?    # 0或1个 最小匹配 没加-r参数需转义 \?
$    # 最后一行
.*   # 匹配任意多个字符
\(a\)   # 保存a作为标签1(\1)

sed 模式空间  

# 模式空间(两行两行处理) 模式匹配的范围,一般而言,模式空间是输入文本中某一行,但是可以通过使用N函数把多于一行读入模式空间
# 暂存空间里默认存储一个空行
			
n   # 读入下一行(覆盖上一行)
h   # 把模式空间里的行拷贝到暂存空间
H   # 把模式空间里的行追加到暂存空间
g   # 用暂存空间的内容替换模式空间的行
G   # 把暂存空间的内容追加到模式空间的行后
x   # 将暂存空间的内容于模式空间里的当前行互换
!  # 对其前面的要匹配的范围取反
D   # 删除当前模式空间中直到并包含第一个换行符的所有字符(/.*/匹配模式空间中所有内容,匹配到就执行D,没匹配到就结束D)
N   # 追加下一个输入行到模式空间后面并在第二者间嵌入一个换行符,改变当前行号码,模式匹配可以延伸跨域这个内嵌换行
p   # 打印模式空间中的直到并包含第一个换行的所有字符

sed 的标签函数

: lable   # 建立命令标记,配合b,t函数使用跳转
b lable   # 分支到脚本中带有标记的地方,如果分支不存在则分支到脚本的末尾。
t labe    # 判断分支,从最后一行开始,条件一旦满足或者T,t命令,将导致分支到带有标号的命令出,或者到脚本末尾。与b函数不同在于t在执行跳转前会先检查其前一个替换命令是否成功,如成功,则执行跳转。

sed -e '{:p1;/A/s/A/AA/;/B/s/B/BB/;/[AB]\{10\}/b;b p1;}'     # 文件内容第一行A第二行B:建立标签p1;两个替换函数(A替换成AA,B替换成BB)当A或者B达到10个以后调用b,返回
echo 'sd  f   f   [a    b      c    cddd    eee]' | sed ':n;s#\(\[[^ ]*\)  *#\1#;tn'  # 标签函数t使用方法,替换[]里的空格
echo "198723124.03"|sed -r ':a;s/([0-9]+)([0-9]{3})/\1,\2/;ta'  # 每三个字符加一个逗号

sed 引用外部变量方式

sed -n ''$a',10p'
sed -n ""$a",10p"

  

 

转载于:https://www.cnblogs.com/sharesdk/p/8696705.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值