Вопросы с меткой [sed]


Изменить все строки подходящие под шаблон в файле с помощью команд Linux

Ответить

ответов 0

1

Из того что я понял нужно что то на подобии этогоsed -r '/^some_string/s/Argc\("[^"]+"\)/Argv"\1"/' file

Вывести в shell строки, не содержащие

Узнать ответ

ответов 2

0

sed -e 's/#.*$//' -e '/^$/d' filename > result

Sed замена на слов на другие значения

Ответить

ответов 0

2

Вы \+ не забыли?

0

супер !!! забыл!)) спасибо )

0

А что я говорил?

0

Виктор прошу прощение я сразу не заметил ваш комментарий. Приношу свои извинения.

Как вставить текст из одного файла в конец другого файла

Узнать ответ

ответов 1

0

То есть, во втором файле нет ничего, кроме одной строчки с IP-адресом?

0

Нет,только ip address, из него нужно в то месте вставить

Рекурсивное удаление вирусного включения

Узнать ответ

ответов 1

0

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

0

Проверьте такую команду grep -lR 'gfjfgjk' /каталог/ | xargs sed -i '7s/^{//;1,6d'

Создание строки на основе совпадения в первом столбце списка

Ответить

ответов 0

0

в perl: с помощью хешей, где: ключ - день недели, а массив со значением - месяцы, $VAR1 = { 'Friday' => [ 'Jan', 'Oct'] };

awk, sed - отсеять строки, если в определенном поле строки нет нужного количества символов

awk sed

Узнать ответ

ответов 1

0

А почему собственно не grep? Вроде ж как раз для него задача?

0

sed -r -n 's/^([X]{5}:.*)$/\1/gp' ./file.txt так еще по идее сработает, grep -P '^[X]{5}:' ./file.txt тоже должно сработать

0

Ваш код работает, но вы не заметили что символы не только X а любые произвольные. Если заменить тут 5 на * как-то...

0

А буквы одинаковые должны быть или любая последовательность?

1

sed будет выглядеть следующим образом sed -r -n 's/^([A-Za-z]){5}:/&/p' ./file.txt если последовательность из одинаковых букв или sed -r -n 's/^[A-Za-z]{5}:/&/p' ./file.txt если любая последовательность букв

0

мысль понятна, а есть возможность все же вписать что-то типа * (любой) ? [:print:] ?

0

Да, шаблон замены сделать так 's/^(.)\1{4}:/&/p' должно сработать? но все сломается если выбранным символом будет :, тут он выберет любую последовательность больше 5, есть смысл защититься от этого к примеру исключив из выборки 's/^([^:])\1{4}:/&/p', вообщем на что фантазии хватит))) Протестировать мне негде, в любом случае гарантированно рабочий вариант с awk у вас есть.

sed: удаление строк со всеми вхождениями кроме первой

sed

Узнать ответ

ответов 1

0

возможно потребуется удалить все дубликаты и тогда лучше использовать uniq

0

я упростил задачу в вопросе, на самом деле исходный текст состоит из нескольких полей, где дубликаты лишь частично совпадают паттернами, потому простое решение типа sort - u или uniq или аналоги не сработают

1

В этом как раз поможет sort где -t указать разделите полей, -k выбрать столбцы по которым выполняем сверку и ключ -u вывести уникальные записи по этим полям. К примеру для строку 123,321,222 нам нужно удалить дубли второго столбца, то команда будет выглядеть так ...| sort -t"," -k'2,2' -u, попробуйте может это как раз то что нужно, в ключе -k указывается диапазон столбцов для проверки.

0

да, это работает, спасибо! Но все же если кто знает ответ на sed, отпишитесь, бывают и такие ситуации.

0

sed '$!N; /^\(123\)\n\1$/!P; D' - нашел на просторах, возможно поможет.

Замена двойных кавычек на одинарные

sed

Узнать ответ

ответов 1

2

sed s/\"/\'/g попробуйте экранировать символы не беря шаблон замены в кавычки, так же cat log избыточный, можно просто sed s/\"/\'/g log.txt

2

"s/\"/'/" или 's/"/'\''/'

Изменить порядок слов в строке SED

Узнать ответ

ответов 1

0

Вот, все таки что нибудь такое sed -r 's/host[ \t]+([0-9.]{9,})[^0-9]+([0-9.]{9,})/\1 255.255.255.255 \2 255.255.255.255/g'

0

Спасибо, почти то что нужно. Дело в том что ключевое слово host можно не встречаться, встречаться 1 раз, встречаться 2 раза. Поэтому я чуть видоизменил ваше решение и все заработало: sed -r 's/host[ \t]+([0-9.]{9,})[^0-9]/\1 255.255.255.255 /g' $aclFileInput > $aclFileOutput

Объединение нескольких строк в одну

sed

Узнать ответ

ответов 1

0

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

0

я уже перепробовал много вариантов с использованием sed. Может быть у вас есть вариант решения ?

0

ну, например: $ sed '1~4{N;N;N;s/\n//g}' file

Как отредактировать html код во многих файлах в php с sed?

Ответить

ответов 0

0

Если вас устраивает ответ, не забывайте голосовать и отмечать как верный. Если не устраивает, вы можете получить уточнения в комментариях.

Поиск родительского тэга внутри файла через условие дочернего тэга bash

Ответить

ответов 0

0

Думаю это не совсем то, что нужно и не совсем bash это, но можете попробовать вот так grep "<operation id=" ./test.txt | while read line; do a=$(awk "/$line/,/<\/operation>/" ./test.txt); [[ $(grep -o "payment_item" <<< "$a") != '' ]] && echo "$a"; done

0

Не сработало, вообще ничего не нашлось...

0

имя к файлу в двух местах указали?

0

Разумеется, вместо text.txt указал полный путь до своего файла, не помогло(

0

@PotroNik, ну уже не смешно. stackoverflow.com/a/1732454/2511795

0

@0andriy, я и не смеюсь, во-первых, варианты которые вы предлагаете верные, никто не спорит. Но есть случаи, когда нет доступа к репозиторию для установки обновления, нет прав на установку пакета программ, и т.д. А во-вторых я предлагаю варианты, кому-то могут они помочь, если по той или иной причине не получится установить специализированное ПО.

Использование регулярных выражение в sed команде для редактирования файла

Узнать ответ


0

Попробуй флаг -r. По умолчанию в sed регулярки не pcre, а posix.

0

Пробовал флаги -ir / -ri / -r / -i / -i -r Безрезультатно

0

А если [0-9]+ вместо \d+?

0

sed -i -E '/LONGITUDE/s/-?[0-9]+\.[0-9]+/-0.1234567/' file.json: 1) \d не поддерживается, 2) Используйте POSIX ERE, если нужен квантификатор +.

0

sed -i '/LONGITUDE/s/-?[0-9]+\.[0-9]+/-0.1234567/' file.json --- Безрезультатно sed -i -E '/LONGITUDE/s/-?[0-9]+\.[0-9]+/-0.1234567/' file.json --- Консоль ругнулась sed: invalid option -- E sed -iE '/LONGITUDE/s/-?[0-9]+\.[0-9]+/-0.1234567/' file.json --- Безрезультатно

0

Попробуйте использовать утилиту jq для работы с файлами json из коммандной строки или из скриптов bash.

0

Какая ОС, версия sed, FreeBSD или GNU?

0

OS - QNX /// sed --version GNU sed version 4.1.5

1

Странно. Должно работать как я написал, но можно и sed -i '/LONGITUDE/s/-\{0,1\}[0-9]\{1,\}\.[0-9]\{1,\}/-0.1234567/g' file.json

0

Ой, маменьки, а вот последний вариант работает. Спасибо =))

0

А так работает? sed -ir '/LONGITUDE/s/-?[0-9]+\.[0-9]+/-0.1234567/' file.json или sed -ir -e '/LONGITUDE/s/-?[0-9]+\.[0-9]+/-0.1234567/' file.json?

Поиск блока кода в regexxer

Узнать ответ

ответов 1

0

Вот тут много на эту тему.

0

Используйте XPath.

0

Переношу комментарий 0andriy: XPath для случая OP: '//li[a[@id="tabs-conteiner-delete"]]. Дальше, например, удаление с помощью xmlstarlet ed --delete '//li[a[@id="tabs-conteiner-delete"]]' input.html > output.html. Этой утилите требуется корректный DOM. Поломанные HTML надо вначале починить. Очевидно можно найти утилиты, которые умеют обрабатывать HTML. Простой же поиск — xmllint --html --xpath '//li[a[@id="tabs-conteiner-delete"]]' input.html

0

@PotroNik Добрый день ещё раз. Почему то этот код не работает хотя по твоим правилам расстовлял все find -name '*.html' -exec sh -c "perl -pi -e 's/\n/~~~/g' {} ; sed -r -i 's|[~]{0,3}[ \t]{0,}<li>[\r\~]{3,4}[ \t]{0,}<a href=\"\.\.\/where\-to\-buy\.html\" id=\"tabs\-conteiner\-delete\">SKLEPY</a>[\r~]{3,4}[ \t]{0,}</li>||g;s|~~~|\n|g' {}" \;

0

@urbanbrains href=\"\.\.\/where\-to\-buy\.html\" вот эта часть как в файле выглядит?

0

@PotroNik href="../where-to-buy.html" но есть еще и href="../../where-to-buy.html" href="../../../where-to-buy.html"

0

@urbanbrains попробуйте заменить на href="[\./]+where-to-buy.html

0

@PotroNik Спасибо все заработало. Только то что вчера делали сработало только на 1 файл вот та команда find -name '*.html' -exec sh -c "perl -pi -e 's/\n/~~~/g' {} ; sed -r -i 's|[~]{0,3}<li>[\r\~]{3,4}[ \t]{0,}<a href=\"javascript:DialerPopForm\(\);\" id=\"tabs-conteiner-delete\">Стать дилером</a>[\r~]{3,4}</li>||g;s|~~~|\n|g' {}" \;