Использование sed для замены только первого вхождения при использовании переменной и "/" в переменной - PullRequest
1 голос
/ 31 мая 2019

У меня есть файл, который выглядит так

I/am/a/string
I'm/still/a/string
Always/a/string

Я пытаюсь использовать sed для замены первого вхождения "string" на переменную, которая содержит "/", как

x=ive/been/replaced

Таким образом, выходное значение sed будет

I/am/a/ive/been/replaced

Поскольку я хочу только первое вхождение и я использую переменную, обычно вы используете

sed -i "0,/string/s//$x/" file  

Однако в этом случае, поскольку переменная имеет "/", я должен использовать другой разделитель, такой как

sed "0,|string|s||$x|" file

Но это не работает.

что мне не хватает?

Примечание:

Я бы хотел сделать это в sed

1 Ответ

1 голос
/ 31 мая 2019

Если вы в порядке, используя awk: вы можете печатать и выходить после первой замены.

awk -v x="${x}" '{gsub(/string/,x);print ;exit}' file
I/am/a/ive/been/replaced

sed версия: это завершится после первого совпадения, обратите внимание, что строка поиска "строка"все еще внутри / /, тогда как часть замещения использует другой разделитель.

sed -n   "0,/string/ s|string|$x|p"   
I/am/a/ive/been/replaced
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...