• 发文
  • 评论
  • 微博
  • 空间
  • 微信

GNU sed实例教程

ExASIC 2022-06-24 11:04 发文

sed (stream editor) is a non-interactive command-line text editor.

官方的定义是非交互的命令行文本编辑器。而我觉得描述成“行内文本插入、删除、替换的小工具“更容易理解。

说到”行内“,即以一行文本为单位进行处理。sed的工作模式如下图,读入一行文本到内部的buffer,执行处理文本命令,输出到屏幕。然后读入下一行文本,进行下一轮处理。

sed使用方法

sed使用格式:

sed -option 'cmd' file

其中,-option是sed的一些选项,'cmd'是处理文本的命令,如插入、删掉、替换等,file是待处理的文件。

cmd一般用单引号括起来,格式如下:

'[line num]X[options]'

line num是指定待处理的单行或几行。如果不指定行号,即为所有行。

X是执行的命令,如a(append)、d(delete)、i(insert)、s(search and replace)等。

options是指某些命令后可以带额外的参数。

sed基本用法示例

示例一:

第一行插入日期

sed '1i //2019-2-13' rtl.v

示例二:

删除`timescale 1ns/100ps行

sed '/`timescale/d'

注:

1. `用ASCII码0x60转义。

2. /xxx/是用正则的方式来指定要处理哪些行,也可以理解成包含xxx的行。

示例三:

endmodule后面加// xxx

sed '/endmodule/a // xxx' rtl.v

示例四:

把output wire修改成output reg

sed '/output/s/wire/reg/' rtl.v

示例五:

看看analog verilog model文件中有哪些module

sed -n '/^module/p' ana_v.v

注:

1. -n是取消默认的打印,即仅打印匹配的行。

2. p是打印命令。

示例六:

把逗号分隔的端口或者变量分成多行书写

sed 's/,/,/g' rtl.v

注:

1. 是回车符,用来换行

2. g是指行内替换多次,如果不加g则替换一次。

示例七:

统计rtl的行数

sed -n '$=' rtl.v

示例八:

把//aa的下一行中的assign加上延时

sed '///aa/{n;s/assign/assign #1/}' rtl.v

注:

n是跳转到下一行,再执行后面的命令。

sed高级用法示例

sed内部有两个存储空间,模式空间(pattern space)保持空间(hold space)。模式空间就是上面提到的“行buffer”,而保持空间可以理解为另一个buffer,可以暂存任何临时数据。你可以想象成CPU的两个寄存器,通过类似汇编的指令来操作。

g 将hold space中的内容拷贝到pattern space中

G 将hold space中的内容追加到pattern space中

h 将pattern space中的内容拷贝到hold space中

H 将pattern space中的内容追加到hold space中

d 删除multiline pattern中的所有行,并读入下一行到pattern中

D 删除multiline pattern中的第一行

x 交换保持空间和模式空间的内容

示例九:

删除rtl中的多行注释 ...

cat -n script

    1 //!{p;d}

    2 :a

    3 //!{N;ba}

    4 s/.*//

    5 p

sed -nf script rtl.v

注:

1. 第1行,当没有遇到的行时,先输出,然后d忽略掉下方的其它sed命令,退出本次处理。只有遇到才开始执行后续的命令。

2. 第2行,:a设置标签

3. 第3行,如果没有遇到,就把内容追加到pattern space

4. 第4行,遇到后,执行查找替换,把 ... 删除

5. 第5行,输出删除注释后的rtl

6. 由于sed正则没有非贪婪模式,不然就可以直接全部读到pattern space再用正则。

7. -f选项是指sed命令写在脚本里,好处是不需要考虑shell的转义,写多个命令时比较方便。

示例十:

交换rtl中的相邻两行

sed -n '{h;n;G;p}' rtl.v

注:

1. h把第一行存入hold space

2. n读入第二行到pattern space(覆盖掉第一行)

3. G把hold space中的内容追加到pattern space

4. p输出

sed手册下载

《GNU sed, a stream editor 》version 4.5, 30 March 2018 by Ken Pizzini, Paolo Bonzini(85页)


声明:本文为OFweek维科号作者发布,不代表OFweek维科号立场。如有侵权或其他问题,请及时联系我们举报。
2
评论

评论

    相关阅读

    暂无数据

    ExASIC

    分享数字集成电路设计中的经验和方...

    举报文章问题

    ×
    • 营销广告
    • 重复、旧闻
    • 格式问题
    • 低俗
    • 标题夸张
    • 与事实不符
    • 疑似抄袭
    • 我有话要说
    确定 取消

    举报评论问题

    ×
    • 淫秽色情
    • 营销广告
    • 恶意攻击谩骂
    • 我要吐槽
    确定 取消

    用户登录×

    请输入用户名/手机/邮箱

    请输入密码