LINUX.ORG.RU

55
Всего сообщений: 548

Cargo.toml dependencies как патчить в ebuild?

как с помощью ebuild пропатчить dependencies version в rust

[dependencies.openssl]
version = "0.10"

нытье «костыли те-же, язык бесчеловечный»

 , , , ,

nanosecond ()

Фильтрация по порядку шаблона

Как можно фильтровать по регулярке (1|a|c|2|3|b|v) с сохранением сортировки по шаблону, если текст:

2
a
v
3
b
f
o
?

Т.е. должно вывести:
a
2
3
b
v


Данный шаблон просто пример. Есть набор строк, нужно фильтровать по второму столбцу по шаблону, сохраняя последовательность как в шаблоне.
Вообще этот шаблон у меня изначально массив ( 1 a c 2 3 b v ), просто преобразовал в регулярку, если как-то сразу массивом получится — ещё лучше.
Через grep получается добиться подобия того, что мне нужно grep -f </file_with_filter_lines /text, но если в /file_with_filter_lines есть регулярки — почему то не работает.
Можно конечно циклом while read пробежаться, но хочется одной командой, while read с циклом сравнения всё-равно будет медленнее какого-нибудь sed, grep или awk

 , , ,

teod0r ()

sed - ускорить обработку файла

Добрый день. Такая задача.

Имеется достаточно большой xml файл в котором некоторые строки содержат вхождения которые нужно заменить. Вхождения в строках всегда разные и соответственно есть файл содержащий перечень этих замен оформленный в файл команд sed. В целом это выглядит так:

sed -f change.txt in.xml > out.xml

change.txt содержит такие команды:

  • s/«161497»/«s61127»/
  • s/«161513»/«s61143»/
  • s/«161498»/«s61128»/

Таких строк более 20 000.

in.xml содержит порядка 50 000 строк и только примерно 6 000 из них имеют вхождения для замены. Строки в которых есть вхождения для замены всегда начинаются с одной и той же последовательности символов. Сам по себе файл постоянно обновляется, поэтому вхождения не постоянны и изменяются в пределах этих 20 000 замен. На сколько я понимаю sed прогоняет каждую строку через файл команд, что достаточно замедляет работу. В данном случае получается около 44 000 холостых прогонов. Как указать SED, что поиск нужно проводить только в строках которые к примеру начинаются с определенной последовательности символов, которая всегда постоянна, а остальные строки переписывать как есть?

 ,

tn-s ()

вывод текста

Доброго здравия всем!
Есть необходимость вывести часть текста в переменную.
Текст выглядит таким образом

WARNING: You have requested checksumming but your crcmod   installation isn't  
using the module's C extension, so checksumming will run very   slowly. For help  
installing the extension, please see "gsutil help crcmod".  
  
Hashes [hex] for 54136292-70ac-428f-8aad-3b29578c4785:  
	Hash (crc32c):		999475b4  
	Hash (md5):		  **2b5985114201db8ab392d277c1838a43**

Перед Hash пробелы или табуляция.
В переменную должно попадать значение, которое выделено жирным текстом.
Пробовал составить выражение для sed, но не получилось.
Буду признателен за помощь.

 , ,

xaleksx ()

help

есть такая строка лога

2020-08-24 12:10:03.531103500 info (32407) Message processed from=email: test@ya.ru to=email: user1@test.local
archived=Y sent=N w_time=4426 msec msg_size=202080 bytes events=1 blocked=Y
Мне нужно во-первых найти в логе все строки которые имеют test@ya.ru а затем из полученных строк просуммировать значение msg_size и вывести эту цифру в итоге Как добиться такого?

 , , ,

w1nner ()

Выбрать из текста текст между оговоренными строками

Нет, это не экзамеционная задача, просто мне приходится парсить лог одной программы.

В чём суть вопроса, допустим, наши оговоренные строки — это:

AAA---AAA

и

BBB---BBB
, тогда текст

00000
11111
AAA---AAA
22222
BBB---BBB
33333
44444
55555
AAA---AAA
66666
77777
88888
BBB---BBB
99999

должен превратиться в

22222
66666
77777
88888

То есть все между A и B оставить, все между B и A убрать, как и сами эти A и B.

 , , , ,

Vsevolod-linuxoid ()

awk. Как сделать, чтобы возвращал false? И вопросы по sed

Как сделать, чтобы awk возвращал false?

Вот, например,

awk '$2 == "aa" {print; exit}' /file

Мне нужно чтобы он выводил первое совпадение и завершался, а в случае, если ничего не найдено, завершался с ошибкой. Как -m1 у grep.
Пробовал втыкать разные else и false, но без знания синтаксиса не получается.
Ещё одна проблема, что он выводит пустые строки, когда ничего не нашёл, если перенаправлять его вывод в переменную. Как этого избежать?

Заодно спрошу по sed. У него ущербный man.
Как сделать, чтобы обрабатывал только первое встретившееся совпадение? Опять же аналог ключа -m1 у grep.
Чтобы работало для всяких там 's///'. Знаю, что, вроде бы, нужно добавить какие-то символы и '1' перед 's'.
А как пользоваться командой 'p'? Наподобие '/rrrr/d', только не 'd', а 'p', но оно почему-то не работает.

 ,

teod0r ()

Помогите по sed'у

Всем доброго дня Подскажите, вот изучаю сед хочу научится переставлять слова разделенные пробелами но что то ничего не получается Допустим слово может быть любым набором символом, все кроме пробелов

Итого соорудил вот такую конструкцию

echo 'abcd qwer zxc 123' | sed -E "s/([^[[:space:]]]+)([^[[:space:]]]+)([^[[:space:]]]+)/\2 \1 \3/"

Вроде все по гуглу и мануалам но не работает, вывод даёт теже

abcd qwer zxc 123

Что не так то?

 ,

barmaley99 ()

как укоротить слова в файле?

есть много скриптов в них _переменные начинающиеся с _

["{_т,_тут}"]  
_тут = _нужна_проверка_конфликта
_или_такими=_неТрололо
["{_т,_ту}"]
_ту = _н
_и=_нт  

цель укоротить без конфликтов слова скриптом перед сборкой

примеры файлов https://github.com/search?q=language%3ASQF+_&type=code

совсем не понимаю sed, и немного bash
помогите хотябы частично

по пунктам

===============================================

_var _var_var_var {["u _t, jj _t2[_tut ]_tut _Nujna;_konflict"_ili_ebobU_uu uu

1.0

наверняка можно все в пунктах 1.1-1.5 сделать 1-2 выражениями но

1.1

если нету символа _ перед [a-zA-Z0-9]+ т.е. любое слово например u uu но не _u_uu перед ними ставится перенос строки
что должно получиться

_var _var_var_var {["
u _t, 
jj _t2[_tut ]_tut _Nujna;_konflict"_ili_ebobU_uu 
uu

1.2

если нету [a-zA-Z0-9]+ перед символом _ делать перенос строки перед _
т.е. _var _var_var_var _ili_ebobU_uu но не _var_var _ebobU_uu
что должно получиться

_var 
_var_var_var {["
u 
_t, 
jj 
_t2[
_tut ]
_tut 
_Nujna;
_konflict"
_ili_ebobU_uu 
uu

1.3

удалить строки начинающиеся не с _ что должно получиться

_var 
_var_var_var {["
_t, 
_t2[
_tut ]
_tut 
_Nujna;
_konflict"
_ili_ebobU_uu 

1.4

после последнего символа [a-zA-Z0-9] удалять все в строке
что должно получиться

_var
_var_var_var
_t
_t2
_tut
_tut
_Nujna
_konflict
_ili_ebobU_uu

1.5

убрать повторяющиеся переменные _tut но не _var_var_var
что должно получиться

_var
_var_var_var
_t
_t2
_tut
_Nujna
_konflict
_ili_ebobU_uu

это будет массив для 2.1

2.1

bash, могу сам написать и укоротить переменные
но вопросы по sed
в оригинале изменить слова из массива полученные в 1.5 наподобие _var но так чтобы не изменились _var_var_var например на _v
т.е. похоже на 1.2 но проверка, только если перед переменной например _var нет [a-zA-Z0-9]+ изменять _var на _v
должно получиться

_v _va {["u _t, jj _t2[_tu ]_tu _N;_k"_i uu

 ,

nanosecond ()

sed не работает регулярка в замене

35:8080
5681:8080
8456:8080

пытаюсь убрать двоеточие между числами в последних 3-х строчках

sed -r '11,13 s/[0-9]*\:[0-9]*/[0-9]{1,+} [0-9]{1,+}/' fw_filter.cfg

получаю:

web-serverEU-10.168.115.25:443;8080 log DEBUG
web-serverUSA-111.45.30.20:2443;8192 log DEBUG
web-serverSA-172.54.21.75:8443 log WARN
PGSQL-serverFR-89.104.110.30:5454 INFO
MongoDB_masterUSA-89.178.114.82:5000 log LEVEL4
MongoDB_slaveUSA-54.32.119.55:5500 log LEVEL4              RabbitMQ_node1-52.16.128.10:8989 log ALL
RabbitMQ_node2-74.16.128.10:8989 log ALL
                                                           [0-9]{1,+} [0-9]{1,+}
[0-9]{1,+} [0-9]{1,+}
[0-9]{1,+} [0-9]{1,+}

 , ,

w1rox ()

Адский разбор вывода ps aux регулярками

sed не распознаёт обратные ссылки больше 9. Таким образом, код

ps aux | sed -r 's/([^ ]+) +([^ ]+) +([^ ]+) +([^ ]+) +([^ ]+) +([^ ]+) +([^ ]+) +([^ ]+) +([^ ]+) +([^ ]+) +(.*)/\1;\2;\3;\4;\5;\6;\7;\8;\9;\10;\11/g'
не работает так, как предполагалось. Последние колонки отображатся как USER0, USER1. Perl тоже не видит дальше девятой обратной ссылки. В итоге команда
ps aux | perl -ne 's/([^ ]+) +([^ ]+) +([^ ]+) +([^ ]+) +([^ ]+) +([^ ]+) +([^ ]+) +([^ ]+) +([^ ]+) +([^ ]+) +(.*)/\1;\2;\3;\4;\5;\6;\7;\8;\9;\10;\11/g; print $_' 
просто ничего не выдаёт дальше девятой колонки.

Зато сработала команда

ps aux | perl -ne 'm/([^ ]+) +([^ ]+) +([^ ]+) +([^ ]+) +([^ ]+) +([^ ]+) +([^ ]+) +([^ ]+) +([^ ]+) +([^ ]+) +(.*)/; print $1 . ";" . $2 . ";" . $3 . ";" . $4 . ";" . $5 . ";" . $6 . ";" . $7 . ";" . $8 . ";" . $9. ";" . $10 . ";" . $11 . "\n"' 

Я понимаю, что должны быть более лёгкие способы реализации, укажите, пожалуйста.

 , , ,

gedisdone ()

Фильтрация по строкам

Что-то не соображу, допустим есть несколько строк и нужно вывести все строки после строки содержащей «BEGIN» до строки содержащей «END». Это у нас sed ведь лучше применять?

 , ,

sunny1983 ()

sed не работает регулярное выражение

cat test_file:

1983 Ivanov P.V 23d05vT Web-Dev
1974 Petrov F.A X49#@S  ProjectMgr

нужно убрать цифры(год рождения) в начале каждой строки

решил вот так:

sed -r 's/[0-9]{4}/ /g' 

но почему так не работает?

sed -r 's/^[0-9]{4}/ /g'

нужны варианты с условием замены,где строка должна начинатся с 4х-цифр

 ,

w1rox ()

bash найти в фале и заменить подстроку если найденное значение больше чем эталон

Доброго Вам времени суток!

Подскажите как можно решить задачу:

есть входной файл вида:

EndTime v="27.05.2021 17:09:00"
UserTime v="28.05.2021 18:20:15"
UserTime v="27.05.2021 12:20:34"
UserTime v="27.05.2021 21:12:14"

EndTime забираем в переменную:

ENDTIME="$(cat "${file}" |  grep "EndTime" | sed 's/.*v=\"\(.*\)\".*/\1/' )"

далее надо получить такой-же файл, но значения позже (посимвольно больше) чем в переменной, заменить на значения из переменной $ENDTIME

EndTime v="27.05.2021 17:09:00"
UserTime v="27.05.2021 17:09:00"
UserTime v="27.05.2021 12:20:34"
UserTime v="27.05.2021 17:09:00"

Можно было бы через hold space и pattern space попробовать, но ума не приложу, как в sed или awk вставить сравнение результата со строкой.

Есть мысли?

 , , , ,

sewernyi ()

что значит параметр ./1 в sed

1)sed -e ‘2,+2!d’ ./1

2)sed -e ‘$!d’ ./1

3)sed ‘/dev.cdrom.debug=0/,/vm.swappiness=60/d’./1

 ,

w1rox ()

Заменить внутри тегов текстом из другого файла.

Есть ~/file1 с наполнением в тегах

<graphicsPreferences> 
настройки
</graphicsPreferences>

Нужно заменить содержимое. Мне удалось удалить его, но с тегами включительно. Как удалить все, что между <graphicsPreferences> и следующим шагам залить туда содержимое ~/file2?

 

abbat81 ()

sed - удаление комментариев

Всем привет, Хочу из файла /etc/filebeat/filebeat.yml удалить комментарии в строках 1,3 (нумерация условна, в файле все иначе)

#output.logstash:
  # The Logstash hosts
  #hosts: ["localhost:5044"]
Нагуглил только полное удаление всех коментов в файле через sed, есть идеи как удалить комменты только из 1 и 3 строки? В 3 строке перед комментарием - 2 пробела, они должны остатся.

 

dim4k ()

sed и квадратные скобки

Доброго времени суток!

Подскажите, пожалуйста, как сделать замену, чтобы осталось только слово test без выделения цветом?

Пример:

echo -e "\e[1;33mtest\e[0m"

Пробовал разные простые варианты:

$ echo -e "\e[1;33mtest\e[0m"|sed "s#\e[1;33m##g"
sed: -e expression #1, char 13: unterminated `s' command
$ echo -e "\e[1;33mtest\e[0m"|sed "s#[[(\e1;33m)]##g"
tst0
$ echo -e "\e[1;33mtest\e[0m"|sed -E "s#.*33m##g"|sed -E "s#[\e\[0m##g"
sed: -e expression #1, char 12: unterminated `s' command

Не выходит.

Куда копать?

 ,

ameame2021 ()

Self encrypted drive

Дано: новый диск Samsung Evo 980 500 Gb.

Ясвою последовательность действий описал тут:

https://gist.github.com/tz4678/2d3576b02df66986c4d5e732b6f30fbe

На зашифрованном диске у меня GPT и Grub, три раздела: Fat32, Btrfs, Ext4 для данных, которые я еще не перенес.

Проблема: я сначала установил пароли, загрузил PBA, потом установил арч, решил залочить диск, чтобы тот пароль запрашивал.

$ sedutil-cli --enableLockingRange 0 pass /dev/nvme0n1
$ sedutil-cli --setMBREnable on pass /dev/nvme0n1  

Перегрузился.Система не грузится, в BIOS нет никаких записей (их sedutil должен добавить?). Взял разблокировал диск. Установил по новой Grub, добавил записи…

Собственно вопрос: а как правильно-то делать? Я хочу чтобы в биосе можно было выбирать что-то, вводить пароль, а потом грузился бы GRUB. В Арч вики ничего не написано.

 

tz4678 ()

Удаление строк логов за последнее *** дней/часов/минут от текущей даты.

Добрый день! Столкнулся со своеобразной задачей! Нужно удалять стоки логов за определенный период времени от текущего времени и вносить изменения в эти же файлы. (Зачем так до конца и не понял)))). Находил весьма похожие решения на sed, awk и perl, но адаптировать конкретно под эту задачу не хватило уровня( Прошу помощи здесь.

 , , ,

Denis777 ()