嗨,我有一个约束文件。
[get_ports {rdata[*]}] [get_ports {wdata[*]}] [get_ports {axirdata[*]}] [get_ports {raddr[*]}] [get_ports {waddr[*]}] [get_ports en] [get_ports {xyz[*]}] [get_ports err]
以上约束位于单行中。我想将其转换为
列[get_ports {rdata[*]}]
[get_ports {wdata[*]}]
[get_ports {axirdata[*]}]
[get_ports {raddr[*]}]
[get_ports {waddr[*]}]
[get_ports en]
[get_ports {xyz[*]}]
[get_ports err]
我想将每个[get_port port_name]分成一个单行列
我该怎么办?
谢谢
答案 0 :(得分:1)
使用将\n
理解为a newline
的sed:
$ sed 's/] *\[/]\n[/g' file
[get_ports {rdata[*]}]
[get_ports {wdata[*]}]
[get_ports {axirdata[*]}]
[get_ports {raddr[*]}]
[get_ports {waddr[*]}]
[get_ports en]
[get_ports {xyz[*]}]
[get_ports err]
使用任何sed:
sed 's/] *\[/]\
[/g' file
或任何awk:
awk '{gsub(/] *\[/,"]\n[")}1' file
答案 1 :(得分:1)
虽然不清楚,但是您似乎想将行转换为单行。
paste -sd" " Input_file
输出如下。
[get_ports {rdata[*]}] [get_ports {wdata[*]}] [get_ports {axirdata[*]}] [get_ports {raddr[*]}] [get_ports {waddr[*]}] [get_ports en] [get_ports {xyz[*]}] [get_ports err]
编辑: :由于OP更改了输入样本和预期输出样本,因此现在添加以下解决方案。
awk '{gsub(/\] \[/,"]"ORS"[")} 1' Input_file
OR
awk '{gsub(/] /, "]" ORS)} 1' Input_file
输出如下。
[get_ports {rdata[*]}]
[get_ports {wdata[*]}]
[get_ports {axirdata[*]}]
[get_ports {raddr[*]}]
[get_ports {waddr[*]}]
[get_ports en]
[get_ports {xyz[*]}]
[get_ports err]
答案 2 :(得分:0)
确保'get_ports'之后的字符串中没有空格
$ echo '[get_ports {rdata[*]}] [get_ports {wdata[*]}] [get_ports {axirdata[*]}] [get_ports {raddr[*]}] [get_ports {waddr[*]}] [get_ports en] [get_ports {xyz[*]}] [get_ports err]'| sed -E 's/(\[get_ports\s+\S+)\s/\1\n/g'
答案 3 :(得分:0)
这可能对您有用(GNU sed):
sed 's/ \[get_ports/\n&/g' file
这会在每个字符串[get_ports
之前插入换行符,并按照您指定的方式重现结果。
要正确设置列的格式,请使用:
sed 's/ \+\(\[get_ports\)/\n\1/g' file
这会用换行符为每个字符串替换前导空格。