преобразовать соответствующий шаблон в строку - PullRequest
0 голосов
/ 05 апреля 2019

Привет, у меня есть файл ограничений.

[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]

Я хочу разделить каждое [имя_порта_порта_порта] в один столбец из одной строки

Как это сделать?

Спасибо

Ответы [ 4 ]

1 голос
/ 05 апреля 2019

Хотя это не ясно, похоже, что вы хотите преобразовать строки в один ряд.

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]
1 голос
/ 05 апреля 2019

С помощью sed, который понимает \n как значение a newline:

$ 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
0 голосов
/ 06 апреля 2019

Это может работать для вас (GNU sed):

sed 's/ \[get_ports/\n&/g' file

Вставляет новую строку перед каждой строкой [get_ports и воспроизводит результаты так, как вы указали.

Чтобы правильноотформатируйте столбец, используйте:

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

Заменяет начальные пробелы новой строкой для каждой строки.

0 голосов
/ 06 апреля 2019

гарантирует отсутствие пробела в строке после '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'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...