Ответы пользователя по тегу sed
  • Сравнить файлы и удалить совпадения по первым 7 символам?

    1. крутим циклfor
    2. обрезаем 7 символов в условиме поиска через head -c7 ну или через cat 11.txt |egrep -o .{7}
    там как придумаешь
    3 ищем в массиве grep -v (отрицание шаблона) и выводим его на вывод если true
    Все

    А вот тебе пример с чего можно начать работать
    Обработка содержимого файла

    Чаще всего вложенные циклы используют для обработки файлов. Так, внешний цикл занимается перебором строк файла, а внутренний уже работает с каждой строкой. Вот, например, как выглядит обработка файла /etc/passwd:

    #!/bin/bash
    IFS=$'\n'
    for entry in $(cat /etc/passwd)
    do
    echo "Values in $entry –"
    IFS=:
    for value in $entry
    do
    echo " $value"
    done
    done

    Ответ написан
  • Как как распарсить .rc файл командой sed?

    как-то так ?

    echo -E "const std::map<unsigned int, std::string> nameMap = {"; cat /tmp/111.txt | egrep IDS | sed -e 's/\(IDS_STRING[0-9]\{1,\}\)[ ]\{1,\}\(.*\)/\{\1\, \2\},/gp'; echo "};"



    Вводный файл
    root@Bonus:/tmp# cat 111.txt
    STRINGTABLE
    BEGIN
        IDS_STRING101           "Example string 1"
        IDS_STRING102           "_Example string 3.14"
    END
    
    STRINGTABLE
    BEGIN
        IDS_STRING103           "Example string 3"
        IDS_STRING104           "_Example string 4"
    END


    Вывод
    root@Bonus:/tmp# echo -E "const std::map<unsigned int, std::string> nameMap = {"; cat /tmp/111.txt | egrep IDS | sed -e 's/\(IDS_STRING[0-9]\{1,\}\)[ ]\{1,\}\(.*\)/\{\1\, \2\},/gp'; echo
    const std::map<unsigned int, std::string> nameMap = {
        {IDS_STRING101, "Example string 1"},
        {IDS_STRING101, "Example string 1"},
        {IDS_STRING102, "_Example string 3.14"},
        {IDS_STRING102, "_Example string 3.14"},
        {IDS_STRING103, "Example string 3"},
        {IDS_STRING103, "Example string 3"},
        {IDS_STRING104, "_Example string 4"},
        {IDS_STRING104, "_Example string 4"},
    };
    root@Bonus:/tmp#


    Собственно по вашему тз.
    теперь что касается строк, вы не привели примера этих строк, но их можно выхватить несколькими способами, начиная с банальных cut и awk с соответствующими разделителями, ну и самим сед тоже можно.
    За разделитель можно взять первое "
    Из пояснений могу добавить что \1 это $1 в синтаксисе седа ;) ну и двойка соответственно $2
    Ответ написан
    Комментировать
  • Как отредактировать содержимое кучи файлов?

    find . -regex ".*\.\(php\|js\|css\)" -exec sed -i 's/\/bitrix\/templates\//\/local\/templates\//g' "{}" \;

    find . искать от текущего каталога и ниже
    -regex ".*\.\(php\|js\|css\)"- можно удалить, тут думаю сам поймешь для чего это
    -exec- выполнить команду с найденым/
    sed -i 's/было/стало/g; потоковый редактор бро это сила.
    {}- подставить вывод find - то есть собственно сам список файлов.
    \;- закрываем экранирем
    Ответ написан
  • Как с помощью SED вставить слово в кавычках?

    Ответ написан
    Комментировать
  • Как удалённо выполнить sed с кавычками?

    Тут писал как в седе экранировать хитрые символы

    sed -i 's/\x24config\[\x27product_name\x27\] = \x27true\x27\x3B/\x24config\[\x27product_name\x27\] = \x27false\x27\x3B/' /etc/lalala/lala.conf

    Посмотреть пример
    Вторая часть вопроса
    ssh [User_Name]@[Rremote_Host_Name or IP] [Command or Script]


    Перед тем как менять можно протестить вместо -i поставь -e будет вывод в терминал результата
    Спасибо кэп вопрос решен
    Ответ написан
    1 комментарий
  • Ошибка sed, почему?

    самое частое ты тупо указал /scrypt.sh
    но в cron по умолчанию нет $PATH
    нужно указать путь до интерпритатора
    /bin/bash scrypt.sh
    лучше покажи что у тебя в кроне
    Ответ написан
    Комментировать
  • Почему sed неверно обрабатывает вхождения (регулярные выражения)?

    shambler81
    @shambler81 Куратор тега Linux
    раз.
    https://github.com/EricChiang/pup
    2. если нужно спарсить что-то сложное но не на постоянной основе, обучится даже школьник.
    https://chrome.google.com/webstore/detail/web-scra...
    3. для этого вообще лучше подходят спец проги xmlstarlet, html-xml-utils .... и тд
    4.
    cut -d '>' -f3 111.txt | sed 's/<\/td//g' 1 переменная
    cut -d '>' -f5 111.txt | sed 's/<\/td//g' 2 переменная
    5ec80860ac569194842808.png
    Ответ написан
    Комментировать
  • Как заменить строку используя регулярное выражение в SED?

    's/include \$_SERVER\[\x27DOCUMENT_ROOT\x27\]\.\x27\/file\.php\x27\;/111111111/'g

    Изи я же писал по этому поводу в вики читайте в низу, там же приводится таблица спецсимволов.

    Для удобства отладки рекомендую
    https://sed.js.org/?gist=821124e809676c2b44c4e4ac2...

    для отладки на вашей ОС удобно использовать ключ -e

    sed -e 's///g' - принтует вывод на экран и уже после отладки заменте на -i
    Ответ написан
    Комментировать
  • Как составить регулярное выражение для SED?

    cat 11.txt | cut -d \" -f 6 возможно вам подойдет именно такой вариант.
    значение после 6 разделителя "
    В противном случае вам нужно будет делать что-то вроде
    <input type=\\x22hidden\\x22 name=\\x22csrf.sign\\x22 value=\\x22c9e19b1287aca01ed1d65ebecd26706245aa4be31ff5d03fa36bc5633b45aad4b045ff421c25df734878cbaec6d8bfea28221c3377439f20ff1ec4d735e1c1a1\\x22\/><input type=\\x22hidden\\x22 name=\\x22csrf.ts\\x22 value=\\x221556511260444\\x22\/><\/form

    разделдять на группы и выводить уже нужную.
    В общем если вы дадите больше вводных данных по формату файла и что вы хотите получатьв конце то можно будет дать более качественный ответ
    Ответ написан
    2 комментария
  • Как заменить в двух файлах несколько значений?

    Сложный поиск в нескольких видах файлов и замен текста в каждом из них, от текущего каталога и ниже.
    find . -regex ".*\.\(php\|js\|css\)" -exec sed -i 's/\/bitrix\/templates\//\/local\/templates\//g' "{}" \;

    Но поскольку я подозреваю что вы собираетесь делать, рекомендую вам скачать Битрикс вм.
    Ответ написан
  • Bash - как отсортировать файлы по цифрам?

    shambler81
    @shambler81 Автор вопроса, куратор тега Linux
    Неа
    domain.ru_20170412_060001_full_445c63bf.tar.1
    domain.ru_20170412_060001_full_445c63bf.tar.10
    domain.ru_20170412_060001_full_445c63bf.tar.100
    Ответ написан
    Комментировать
  • Bash вставить несколько строк в файл после конкретной?

    shambler81
    @shambler81 Автор вопроса, куратор тега Linux
    Вот скриктец, у кого идеи есть по оптимизации, скажу спасибо.

    #тут указываем совой домен
    
    DOMAIN=mfwo.ru
    EMAIL=vtaran@wildorchid.ru
    
    #############################################################################################################
    #ставим гит, если его нет
    rpm -q git && echo "А гит уже стоит и мы его пропускаем" || yum install git
    # в этой папке и будет лежать сам дистрибутивчик cetbot, он нам нужен будет потом для  обновления ключиков.
    cd /root
    #проверяем  не скачан ли он уже и качаем если нет.
    test -d certbot && echo "Каталог уже есть, ниче не качаем" || git clone https://github.com/certbot/certbot
    cd certbot
    
    # Выставляем права  на файл
    chmod a+x ./certbot-auto || echo "проблема  правами на файл" && echo "Права  на файл поменяли успешно"
    
    
    # проверяем верен ли путь до сайта, и не сгенерирован ли уже ключик, если все ок генерим!
    test -d /home/bitrix/ext_www/$DOMAIN  || echo "/home/bitrix/ext_www/$DOMAIN.ru -нет такой директории"  && test -f /etc/letsencrypt/live/$DOMAIN/fullchain.pem && echo "А файл уже есть, не не генерируем новый !" || 
    ./certbot-auto certonly --webroot --agree-tos --email $EMAIL -w /home/bitrix/ext_www/$DOMAIN -d $DOMAIN -d www.$DOMAIN || echo "А не угадали с каталогом, проверяем пути" &&
    
    
    # коментит "include bx/conf/ssl.conf/ssl.conf;"  и добавляет строки
    # ssl_certificate /etc/letsencrypt/live/$DOMAIN/fullchain.pem;
    # ssl_certificate_key /etc/letsencrypt/live/$DOMAIN/privkey.pem;
    # ssl on;
    # keepalive_timeout 70;
    # keepalive_requests 150;
    # ssl_session_cache shared:SSL:10m;
    # ssl_session_timeout 10m;
    sed -i "s/ include bx\/conf\/ssl.conf\x3B/\ #include bx\/conf\/ssl.conf\x3B\n  ssl_certificate \/etc\/letsencrypt\/live\/$DOMAIN\/fullchain\.pem\x3B\n  ssl_certificate_key \/etc\/letsencrypt\/live\/$DOMAIN\/privkey\.pem\x3B\n  ssl on\x3B\n  keepalive_timeout 70\x3B\n  keepalive_requests 150\x3B\n  ssl_session_cache shared:SSL:10m\x3B\n  ssl_session_timeout 10m\x3B/g" /etc/nginx/bx/site_avaliable/bx_ext_ssl_$DOMAIN.conf && echo "замена  в конфигах прошал  без ошибок"
    
    # перед рестартом  проверяем валидность конфигов, если ок рестартуем.
    
    service nginx configtest && echo "Nginx  валидно завершил проверку конфигов" && service nginx restart 
    
    #certbot-auto renew
    #првоеряем нет ли записи в кроне и добавляем ее  
    echo "Записываем Автообновление сертификатов  крон"
    crontab -l | grep -q "\* \*/12 \* \* \*   cd /root/certbot/ \&\& \./certbot-auto renew >> /dev/null 2>\&1 "  && echo "А в кроне уже запись есть, ничего не добавляем" || echo "* */12 * * *   cd /root/certbot/ && ./certbot-auto renew >> /dev/null 2>&1 "  >> /var/spool/cron/root  
    
    echo "не забывайте про редиректы которые могут вести на http!!!!!!!!"
    Ответ написан
    Комментировать
  • Не отрабатывает find… sed

    find . -name '*.php' -exec sed -i 's/старый/новый/g' "{}" \;
    Ответ написан
    Комментировать