Замена пробела подчеркиванием только в указанных c позициях с использованием sed - PullRequest
0 голосов
/ 29 января 2020

У меня есть какое-то CREATE утверждение типа

CREATE TABLE [a b]{ }
CREATE TABLE [anything everything]{}

Теперь я хочу заменить пространство в скобках на _, то есть вывод должен быть:

CREATE TABLE [a_b]{ }
CREATE TABLE [anything_everything]{ }

Я пытался использовать sed, но не могу сохранить строки.

1 Ответ

3 голосов
/ 29 января 2020

Minimal sed:

sed 's/\(\[[^] ]*\) /\1_/'

Если вы можете найти более одного пробела в скобках:

sed ':a;s/\(\[[^] ]*\) /\1_/;ta'

И как прокомментировал Гленн Джекман , для BSD версия sed, точка с запятой не работает должным образом. Но вы могли бы написать что-то вроде:

sed -e ':a' -e 's/\(\[[^] ]*\) /\1_/' -e 'ta'

Но я повторяю: вы должны использовать эту ветвь l oop, только если вы ожидаете найти более одного пробела (одна замена) между скобками (Create table [more than one space] {).

...