Используя SED, чтобы добавить строку к существующей строке текста? - PullRequest
0 голосов
/ 26 июня 2010

Я пытаюсь использовать команду linux sed для добавления элемента пути к RewriteBase в файле .htaccess.

Я пробовал это с такими аргументами:

#current RewriteBase is "RewriteBase /mypath"
sed -ie 's/RewriteBase\(.*\)/RewriteBase \1\/add/g' .htaccess

с таким результатом:

addriteBase /mypath

Итак, sed перезаписывает начало строки замены последней строкой.

Почему это так?

Другой вопрос - какзапретить 2 косые черты, когда RewriteBase просто "/".

RewriteBase /

станет

RewriteBase //add

, но должно быть

RewriteBase /add

Есть ли способчтобы предотвратить это?Если нет, я могу запустить вторую команду sed, заменяя все двойные косые черты на одну.Но, возможно, есть более элегантный способ сделать это.

Буду признателен за любую помощь.

Ответы [ 2 ]

2 голосов
/ 26 июня 2010

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

sed -i.bak 's/^M//g;s|RewriteBase.*|&/add|' .htaccess

Специальный символ & представляет все, что соответствует в пространстве образца.

Примечание:

Часть s/^M//g - это sed, эквивалентный dos2unix, а ^M создается путем ввода <ctrl+v><ctrl+m>.

1 голос
/ 26 июня 2010

То, что вы видите, - это sed, включая \r в результате, что выглядит , как будто текст застрял в начале. Пропустите файл через dos2unix, прежде чем пропустить его через sed.

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

...