Строка с седом

Я использую sed для замены строки "\ UPo" на строку "\ textit {Old (пользовательские настройки)}". Я использую следующую команду:

find /home/rom/Desktop/nodeRemoval/report -name \*.tex -exec sed -i "s/\\UPo/\\textit{Old (User's preferences)}/g" {} \;

Я хочу избежать обратной косой черты, поскольку они являются частью строки. Но вместо обратной косой черты это дает мне вкладку! Вывод: \ [TAB] extit {Старый (Настройки пользователя)}

Что не так?

Заранее спасибо,

Rom

2
задан 11 September 2012 в 22:04

1 ответ

Так как Ваше выражение находится в двойных кавычках, строка оценена ударом (который заменяет \\ с \). На самом деле regex, переданный sed, похож на это:

s/\UPo/\textit{Old (User's preferences)}/g

Любой Escape каждая обратная косая черта дважды:

sed -i "s/\\\\UPo/\\\\textit{Old (User's preferences)}/g"

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

sed -i "s/\\UPo/\\textit{Old (User'\''s preferences)}/g"

Это все немного глупо, который является, почему у нас есть Perl.

2
ответ дан 11 September 2012 в 22:04

Другие вопросы по тегам:

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