2013-04-03 5 views
0

Я пытаюсь заменить указанную строку специальными символами в файле в linux. Я попытался использовать обратную косую черту перед каждым специальным символом, но получаю ошибки. Должно быть, что-то не хватает. Как достичь нижеследующего. Заранее спасибо:Sed заменить строку специальными символами

filter = [ "a/sda[0-9]*$/", "r/sd.*/" ] ---> Replace this line with below line 

filter = [ "a/sda[0-9]*$/", "a/sdb[0-9]*$/", "r/sd.*/" ] 

ответ

1

для примера, это работало

sed '[email protected]",@", "a/sdb[0-9]*$/",@' 

выход:

kent$ echo 'filter = [ "a/sda[0-9]*$/", "r/sd.*/" ]'|sed '[email protected]",@", "a/sdb[0-9]*$/",@'               
filter = [ "a/sda[0-9]*$/", "a/sdb[0-9]*$/", "r/sd.*/" ] 
+0

Отлично! Работал как шарм. Итак, вы могли бы помочь мне понять это больше. Итак, мы инициализируем текущую строку как переменную и подаем ее в sed, а именно @. Это я понял. Но как насчет ниже, что именно происходит с кавычками? sed 's @ ", @", "a/sdb [0-9] * $ /", @' –

+0

В 'sed' в качестве разделителя берется любой символ после команды' s' (substitute). Итак, 'sed 's/a/b /'' совпадает с 'sed 's @ a @ b @''. Здесь, используя '@', убедитесь, что вам не нужно скрывать все символы '/' и т. Д. В ваших строках. –

+0

Хорошо, это интересно. Я спрашивал об этом раньше: «, @», –

0

Использование и стратегии столбцов:

$ awk '{$3=$3 "a/sdb[0-9]*$/\042, "; print}' file.txt 
filter = [a/sdb[0-9]*$/", "a/sda[0-9]*$/", "r/sd.*/" ] 
Смежные вопросы