将匹配的模式转换为行

时间:2019-04-05 17:04:55

标签: awk sed grep

嗨,我有一个约束文件。

[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]分成一个单行列

我该怎么办?

谢谢

4 个答案:

答案 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

这会用换行符为每个字符串替换前导空格。