Awk 将匹配模式转换为行

Awk 将匹配模式转换为行,awk,sed,grep,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 {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_name]分隔成一行

我该怎么办


感谢sed将
\n
理解为新行
的意思:

$ 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

sed将
\n
理解为新行的意思:

$ 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

虽然不清楚,但看起来您希望将行转换为一行

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]
[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]
[get_ports {rdata[*]}]
[get_ports {wdata[*]}]
[get_ports {axirdata[*]}]
[get_ports {raddr[*]}]
[get_ports {waddr[*]}]
[get_ports en]
[get_ports {xyz[*]}]
[get_ports err]

虽然不清楚,但看起来您希望将行转换为一行

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]
[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]
[get_ports {rdata[*]}]
[get_ports {wdata[*]}]
[get_ports {axirdata[*]}]
[get_ports {raddr[*]}]
[get_ports {waddr[*]}]
[get_ports en]
[get_ports {xyz[*]}]
[get_ports err]

确保“获取端口”后的字符串中没有空格

$ 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'

确保“获取端口”后的字符串中没有空格

$ 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'
这可能适用于您(GNU-sed):

这将在每个字符串前面插入一个换行符
[get_ports
,并以您指定的方式复制结果

要正确设置列的格式,请使用:

 sed 's/ \+\(\[get_ports\)/\n\1/g' file
这将用换行符替换每个字符串的前导空格。

这可能适用于您(GNU-sed):

这将在每个字符串前面插入一个换行符
[get_ports
,并以您指定的方式复制结果

要正确设置列的格式,请使用:

 sed 's/ \+\(\[get_ports\)/\n\1/g' file

这将用换行符替换每个字符串的前导空格。

一点也不清楚。请在您的帖子中添加更多详细信息,然后让我们知道。在约束文件中,它包含[get_ports{rdata[]}][get_ports{wdata[]}][get ports{axirdata[]}][get ports{raddr get ports{waddr[]}][get get ports en][get_ports{xyz[]}][get_ports err]在一行中。我想在每个[get_ports name]之后将其拆分为一行(第一列)评论并非用于发布示例,请使用代码标签编辑您的帖子。一点也不清楚。请您在帖子中添加更多详细信息,然后让我们知道。在约束文件中,它包含[get_ports{rdata[]}][get_ports{wdata[]}][get uPorts{axirdata[]}][get uPorts{raddr[]}][get_ports{waddr[]}][get_ports en][get_ports{xyz[]}][get_ports err]在一行中。我想在每个[get_ports name]之后将其拆分为一行(第一列)评论并非用于发布示例,请按照之前的要求使用代码标签编辑您的帖子。@Vishal Patel,您能试试这些并让我知道吗?嗨Ravinder,效果很好。谢谢。您能解释一下吗?@oguzismail,当然感谢您让我知道,我非常小心,所以我现在在我的文章中添加了两个括号,我现在也添加了这个解决方案发帖,谢谢。@VishalPatel,这就像我只是用
]
替换所有出现的
][
]
ORS(新行)
[
@Vishal Patel,你能试试这些,然后告诉我吗?嗨,Ravinder,它很好用。谢谢。你能解释一下吗?@oguzismail,当然谢谢你让我知道,我非常小心,所以取了两个括号,我现在也在我的帖子中添加了这个解决方案,谢谢。@Vishal Patel,这就像我只是在替换所有出现的
][
]
ORS(新行)
[