sed (stream editor) is a non-interactive command-line text editor.
官方的定义是非交互地命令行文本编辑器。而我觉得描述成“行内文本插入、删除、替换的小工具“更容易理解。
说到”行内“,即以一行文本为单位进行处理。sed的工作模式如下图,读入一行文本到内部的buffer,执行处理文本命令,输出到屏幕。然后读入下一行文本,进行下一轮处理。
sed使用格式:
sed -option 'cmd' file
其中,-option是sed的一些选项,'cmd'是处理文本的命令,如插入、删掉、替换等,file是待处理的文件。
cmd一般用单引号括起来,格式如下:
'[line num]X[options]'
第一行插入日期
sed '1i //2019-2-13' rtl.v
删除`timescale 1ns/100ps行
sed '/\x60timescale/d'
注:
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
注:
把逗号分隔的端口或者变量分成多行书写
sed 's/,/,\n/g' rtl.v
注:
统计rtl的行数
sed -n '$=' rtl.v
把//aa的下一行中的assign加上延时
sed '/\/\/aa/{n;s/assign/assign #1/}' rtl.v
注:
sed内部有两个存储空间,模式空间(pattern space)和保持空间(hold space)。模式空间就是上面提到的“行buffer”,而保持空间可以理解为另一个buffer,可以暂存任何临时数据。你可以想像成CPU的两个寄存器,通过类似汇编的指令来操作。
删除rtl中的多行注释/* ... */
cat -n script
1 /\/\*/!{p;d}
2 :a
3 /\*\//!{N;ba}
4 s/\/\*.*\*\///
5 p
sed -nf script rtl.v
注:
交换rtl中的相邻两行
sed -n '{h;n;G;p}' rtl.v
注:
《GNU sed, a stream editor 》
version 4.5, 30 March 2018
by Ken Pizzini, Paolo Bonzini
(85页的pdf)
下载:
https://pan.baidu.com/s/1P2Rbln59MASk4KnAN7hXJw?pwd=19y4