2016-01-21 4 views
1

Я пытаюсь редактировать файл с именем BookDB.txt, который содержитUnix СЭД команда не работает

Boy:Man:67.00:15:28 

Harry Potter - Order of Phoenix:J.K.Rowling:70.00:40:20 
Harry Potter - Half Blood Prince:J.K.Rowling:40.00:50:20 

это моя команда

sed -i "s/""$title""/""$newtitle""/g" ./BookDB.txt 

Он работает. Но я хочу убедиться, что он редактирует точную строку $ title, потому что если позволяет сказать, что она содержит «a», тогда вся буква a в моем файле будет изменена. Как использовать <\ \> в этом случае?

+1

Почему не 'sed -i 's/$ title/$ newtitle/g"./BookDB.txt'? Где '$ title' и' $ newtitle' - это переменные, содержащие термин и замену. Ваши цитаты слишком многочисленны. Непонятно, почему вы предлагаете граничные выражения, добавьте дополнительные пояснения. –

+0

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

+0

Он прямо там, но там '' s /././ g ''цитаты и' /../ ../ 'разделители предотвращают любую другую интерпретацию строк. ':)' –

ответ

0

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

sed -i "s/^""$title:/""$newtitle"":/g" BookDB.txt 

Обратите внимание, что ^ анкеров матча к началу строки , и : находится в разделе соответствия и замены.

+0

Большое спасибо за помощь. Это действительно умный способ –

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