2016-09-23 5 views
0

Я пытаюсь заменить (например) 6.0 по 6.1 в файле, без 640 заменяется на 6,1Использование СЭД с переменной, которая содержит точку

У меня в настоящее время:

sed -i "s/$previousName/$newName/" 'myFile' 

Я думаю, что решение может быть в here, но я не нахожу правильное решение.

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

+0

Хорошо, я прочитал вашу ссылку, и я нашел 'СЭД -e«s /[]\/$*.^ | []/\\ &/g'' Что такое, что делает его do и где я должен установить свою переменную в этом? – Sharcoux

ответ

1

Используя внутренний sed:

sed -i "[email protected]$(echo $previousName | sed 's/\./\\./g')@[email protected]" myFile 
+0

почему бы и нет. Давайте попробуем это – Sharcoux

+0

Кажется, что все нормально. Благодаря! – Sharcoux

3

Попробуйте это:

sed -i "s/6\.0/6.1/" 'myFile' 

Ключ спасаясь от . символ в шаблоне, который имеет особое значение. По умолчанию он соответствует любому символу (включая 0 в 640), тогда как перед ним стоит \, он соответствует только литералу ..

Поскольку у вас есть шаблон в переменной, вы могли избежать . в ней первым, как это:

previousNameE="$(sed -e 's/\./\\./' <<< "$previousName")" 
sed -i "s/$previousNameE/$newName/" 'myFile' 
+0

Хорошо, но содержимое находится внутри переменной, поэтому я не могу вручную сбежать. – Sharcoux

+0

@Sharcoux Я обновил свой ответ. – redneb

+0

Извините, я думаю, что решение Leif Ericson появилось за несколько секунд до этого, и мне нравится один лайнер, но спасибо. – Sharcoux

1

если perl приемлемо:

perl -i -pe "s/\Q$previousName/$newName/" 'myFile' 

От perldoc для \Q

Возвращает значение EXPR со всеми ASCII не - символы «слова» backslashed. (То есть всем символам ASCII, которые не соответствуют /[A-Za-z_0-9] /, будет предшествовать обратная косая черта в возвращаемой строке независимо от любых настроек языкового стандарта.) Это внутренняя функция , реализующая \ Q бежать в двойных кавычках

Другой пример:

$ echo '*.^[}' | perl -pe 's/\Q*.^[}/q($abc$)/e' 
$abc$ 

Дальнейшее чтение:Perl flags -pe, -pi, -p, -w, -d, -i, -t?

+0

Прохладный! Что такое Q? Я мог бы искать себя, но я думаю о потенциальных читателях futur. – Sharcoux

+0

Невозможно открыть скрипт perl «s/\ Q1.6.0/1.6.1 /»: нет папки или файла этого типа – Sharcoux

+0

Что такое 'type perl' return? это печатает привет? 'perl -e 'print" Hello \ n "'' – Sundeep

Смежные вопросы