linux
  • bash
  • sed
  • sh
  • 2013-09-20 6 views 0 likes 
    0

    У меня есть этот скрипт:строку в файле заменить SED команды

    #!/bin/sh 
    local name="url" 
    local line='{ "name": "url", "value": "http:\/\/www.example.com\/dir1\/page1" }' 
    
    local name2="protocol" 
    local line2='{ "name": "protocol", "value": "ftp" }' 
    
    sed -i "/\<$name2\>/s/.*/$line2/" /mydir/myfile 
    sed -i "/\<$name\>/s/.*/$line/" /mydir/myfile 
    

    MyFile содержат:

    { "name": "url", "value": "http:\/\/www.example.com\/dir2\/page2" } 
    { "name": "url2", "value": "http:\/\/www.example.net/page" } 
    { "name": "protocol", "value": "http" } 
    

    Я обнаружить проблему с / символа в поле значения с моей SED команды. Как исправить эту ошибку?

    ответ

    3

    Поскольку ваши файлы имеют / повсюду, его лучше использовать дополнительный разделитель регулярных выражений; он поддерживается sed.

    sed -i "/\<$name2\>/s|.*|$line2|" /mydir/myfile 
    sed -i "/\<$name\>/s|.*|$line|" /mydir/myfile 
    
    +0

    проблема У меня есть другие значения, такие как 'ftp | http', в этом случае, как это сделать? – developer

    +0

    Вы можете использовать: 'sed -i '/ <$name2\> /s~.*~$line2~"/mydir/myfile', как я уже сказал, любой персонаж работает даже над персонажами. – anubhava

    +0

    Могу ли я найти еще одну команду для этого, независимо от моего значения контента и имени – developer

    2

    Используйте другой разделитель, как это:

    sed -i "/\<$name2\>/s%.*%$line2%" /mydir/myfile 
    

    Например, это свалка я только сейчас:

    printf "eins x eins\nzwei x zwei\nabc x abc\ndef x def\n" | sed "/abc/s%x%y%" 
    

    Он печатает:

    eins x eins 
    zwei x zwei 
    abc y abc 
    def x def 
    

    Как вы можете см., только строка, содержащая abc, изменяется командой s.

    Вместо знака % вы можете использовать любой символ , который не отображается в значении, которое вы хотите заменить. Запомни. Вы также можете использовать _ или или ; или письмо, номер, что угодно. Он просто не должен появляться в значении.

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