Найти несколько строк между значениями и заменить на новую строку в bash - PullRequest
0 голосов
/ 10 октября 2018

Мне нужно написать bash-скрипт для вывода списка значений из базы данных sql.

Я дошел до сих пор, но теперь мне нужно получить остаток пути.

Строкапока

10.255.200.0/24";i:1;s:15:"10.255.207.0/24";i:2;s:14:"192.168.0.0/21

Теперь мне нужно удалить все между речевыми метками и отправить их на новую строку.

желаемый вывод:

10.255.200.0/24
10.255.207.0/24
192.168.0.0/21

любая помощьбудет принята с благодарностью.

Ответы [ 4 ]

0 голосов
/ 11 октября 2018

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

sed 's/"[^"]*"/\n/g' file

Или использовать вдоль стороны Bash:

sed $'/"[^"]*"/\\n/g' file

Или использовать большинство других sed:

sed ':a;/"[^"]*"\(.*\)\(.\|$\)/{G;s//\2\1/;ba}' file

При этом используется функция, состоящая в том, что в чистом месте удержания находится новая строка.

0 голосов
/ 10 октября 2018

Учитывая, что ваш Input_file такой же, как показано в примере, не могли бы вы попробовать следующее.

0 голосов
/ 10 октября 2018
$ tr '"' '\n' <<< $string | awk 'NR%2'

10.255.200.0/24
10.255.207.0/24
192.168.0.0/21
0 голосов
/ 10 октября 2018

Вы можете использовать:

echo 'INPUT STRING HERE' | sed $'s/"[^"]*"/\\\n/g'

Объяснение:

  • sed 's/<PATTERN1>/<PATTERN2/g': мы заменяем каждое вхождение PATTERN1 на PATTERN2
  • [^"]*: любой символ, который не является ", любое количество времени
  • \\\n: синтаксис для новой строки в sed ( ссылка здесь )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...