Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > *NIX системы: Общие вопросы > Замена символов в определенной строке


Автор: bartram 1.7.2011, 17:01
Есть несколько конфигурационных файлов с определенной структурой данных, необходимо в этих файлах  найти все строки со словом options и заменить конкретно в этой строках, все запятые на символ "|". C мопощью какого средства можно сделать это быстро? Подскажите в какую сторону копать.

Автор: triclosan 1.7.2011, 18:21
vim
Код

:g/options/s/,/|/g

Автор: triclosan 1.7.2011, 18:38
предыдущий пост - с подстрокой "options"

со словом - 

Код

:g/\<options\>/s/,/|/g

Автор: bartram 1.7.2011, 18:44
triclosan, работать будет только в Vim?  А нельзя более универсальными инструментами,  типа sed  и awk, чтобы можно было использовать в bash  скрипте? Но за решение все равно спасибо!

Автор: triclosan 1.7.2011, 19:01
http://vimdoc.sourceforge.net/htmldoc/usr_12.html#12.1 можно в vim автоматизировать, только
Код

:g/\<options\>/s/,/|/ge


Добавлено через 6 минут и 23 секунды
sed:
Код

sed '/\<options\>/s/,/|/g'  text.txt

Автор: afiskon 2.7.2011, 11:11
cat file.txt | perl -e 'while(my $line = <>){ if($line =~ /options/ ){ $line =~ s#|#,#g; }  print $line; }'

Автор: bartram 2.7.2011, 11:16
triclosan, afiskon, спасибо за помощь ребята, вечером проверю ваши способы smile А пока вам + 

Автор: bartram 6.9.2011, 18:02
afiskon, твой вариант не работает, почему-то это команда после каждой буквы в строке вставляет запятую, почему не знаю.

triclosan, вариант с sed, не работает, команда решительно ничего не меняет в документе :((

Добавлено через 10 минут и 26 секунд
На всякий случай пример конфига
Код

{
"common" : {
  "name" : "Имя",
  "options" : "param1=name/_text_,param2|param3=value",
  "inputs" : {
    "0" : "param3=value1",
    "1" : "param3=value2"
  }
},

Мне нужно чтобы в подстроке options  все запятые заменялись на |
Помогите люди добрые! smile

Автор: rodnover 6.9.2011, 18:42
Код

sed -i '/\<options\>/s/,/|/g'  text.txt

ключик -i добавь.

Автор: bartram 6.9.2011, 18:55
rodnover, 
Код

sed: -i may not be used with stdin

Автор: rodnover 6.9.2011, 19:02
у меня (под убунтой) так работает.. тогда так:

Код

sed -i -e '/\<options\>/s/,/|/g'  text.txt


Автор: Vaulter 6.9.2011, 21:00
а почему все советуют искать "<options>" когда речь шла об "options"?
Код

sed '/options/ s_,_|_' text.txt

Автор: bartram 6.9.2011, 22:05
Vaulter, твой вариант работает, только странно что последнюю запятую в конце строки пропускает smile Не знаешь с чем это может быть связано?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)