Замена пробела подчеркиванием только в определенных позициях, используя sed

Замена пробела подчеркиванием только в определенных позициях, используя sed

29.01.2020 05:19:17 Просмотров 33 Источник

У меня есть некоторые CREATEзаявление, как

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

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

Я пробовал использовать CREATE TABLE [a_b]{ } CREATE TABLE [anything_everything]{ } , но я не могу сохранить строки.

У вопроса есть решение - Посмотреть?

https://stackoverflow.com/questions/59969081/replacing-space-with-underscore-at-specific-positions-only-using-sed#comment106055134_59969081
Вы уже что-то пробовали? Пожалуйста, поделитесь!

Ответы - Замена пробела подчеркиванием только в определенных позициях, используя sed / Replacing space with underscore at specific positions only, using sed

F. Hauri

29.01.2020 05:41:07

Минимальный СЭД:

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

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

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

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

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

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

https://stackoverflow.com/questions/59969081/replacing-space-with-underscore-at-specific-positions-only-using-sed/59969519#comment106061791_59969519
Ницца. С помощью стандартного BSD sed на Mac OSX я обнаружил, что должен заменить точку с запятой следующим :aна новую строку.
https://stackoverflow.com/questions/59969081/replacing-space-with-underscore-at-specific-positions-only-using-sed/59969519#comment106095936_59969519
@glennjackman Спасибо, что предупредил меня о BSD sed на MacOS! Я отредактировал свой ответ, добавив версию, протестированную на Mac.
Закрыть X