Используйте sed для замены строки строкой, содержащей имя каталога ( т.е. косая черта "/")

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

sed -i 's/string//some/directory/g' file.txt

и не могу найти прямого ответа, как сделать так, чтобы/some/directoryне нарушал синтаксис sed.

5
29.07.2020, 16:59
3 ответа

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

С тем же успехом можно сказать

sed -i 's,<string>,<some/directory>,g' file.txt

, где ,теперь имеет функцию, обычно выполняемую /, тем самым освобождая последнее от его особого значения.

Обратите внимание, однако (, как указал @Jeff Schaller ), что теперь ,не должен появляться в имени файла или каталога -и это допустимый символ для имен файлов!Этот ответ дает хороший обзор того, как действовать при применении sedк строке со специальными символами.

8
18.03.2021, 23:26

Замена разделителя на тот, который, как известно, не появляется в строках поиска или замены, является хорошим вариантом, когда вы можете найти разделитель, который не появляется в них. Я предпочитаю использовать знак плюс, а не запятую, но это скорее дело привычки.

Однако, если вы не можете найти разделитель, который не появляется в строке, всегда есть обратная косая черта -экранирующая:

sed -e 's/<string>/<some\/directory>/g' file.txt

\перед косой чертой позволяет sedпонять, что это просто косая черта, а не разделитель.

6
18.03.2021, 23:26

@AdminBee До сих пор я видел только #в качестве разделителя, думаю, он встречается в шаблонах реже, чем запятая:

sed -i 's#<string>#<some/directory>#g' file.txt
0
18.03.2021, 23:26

Теги

Похожие вопросы