#awk #sed #grep
#авк #сэд #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 {axirdata[*]}]
[get_ports {raddr[*]}]
[get_ports {waddr[*]}]
[get_ports en]
[get_ports {xyz[*]}]
[get_ports err]
Я хочу разделить каждый [get_port имя_порта] в один столбец с одной строкой
Как я могу сделать?
Спасибо
Комментарии:
1. Совсем не понятно. Не могли бы вы, пожалуйста, добавить больше деталей вместе с вашими усилиями в свой пост и сообщить нам тогда.
2. В файле ограничений он содержит [get_ports {rdata[ ]}] [get_ports {wdata[ ]}] [get_ports {axirdata[ ]}] [get_ports {raddr[ ]}] [get_ports {waddr[ ]}] [get_ports en] [get_ports {xyz[ ]}] [get_ports ошибка] в одной строке. Я хочу разделить его после каждого отдельного [get_ports name] на одну строку (в первый столбец)
3. Комментарии НЕ предназначены для публикации образцов, как и было запрошено ранее, пожалуйста, отредактируйте свой пост с помощью тегов кода.
Ответ №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]
Комментарии:
1. @Вишал Патель, не могли бы вы попробовать это и дать мне знать потом?
2. Привет, Равиндер, все работает нормально. Спасибо. Можете ли вы это объяснить?
3. @oguzismail, конечно, спасибо, что сообщили мне, я был очень осторожен, поэтому взял 2 скобки, я добавил это решение и сейчас в свой пост, спасибо.
4. @VishalPatel , это похоже на то, что я просто заменяю все вхождения
] [
на]
ORS (новая строка)[
.
Ответ №2:
С помощью 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
Ответ №3:
обеспечение отсутствия пробелов в строке, следующей за ‘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_portss S )s/1n/g'
Ответ №4:
Это может сработать для вас (GNU sed):
sed 's/ [get_ports/namp;/g' file
Это вставляет новую строку перед каждой строкой [get_ports
и воспроизводит результаты так, как вы указали.
Чтобы правильно отформатировать столбец, используйте:
sed 's/ ([get_ports)/n1/g' file
Это заменяет начальные пробелы новой строкой для каждой строки.