LINUX.ORG.RU

1
Всего сообщений: 30

Упростить регулярное выражение

Привет, ЛОР!

Есть регулярное выражение:

4.13.0-(1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21)-.*

Каким образом можно заменить это на диапазон с 1 по 21 таким образом, чтобы регулярное выражение осталось читабельным?

 , ,

Deleted ()

Как заставить в Perl в регулярках считать концом строки и \n и \r\n

Столкнулся с подставой, что в nix-ах

if (m/(.{10,})$)/)
{
...
}

символ \r (0x0dh) не покрывается квантификатором $ . В данном примере я выделял из входного файла все строки из 10 или более символов, но обнаружил, что пропускаются строки из 9 символов. Если сделать dos2unix на такой файл с ними, то работает нормально.

Способ с альтернативой

m/(.{10,})(\r|$)/
не подходит, в смысле почему-то все-равно включает \r \r|\n тоже не получается.

Данный пример для иллюстрации проблемы (длину можно и иначе пытаться считать), реальный код несколько сложнее.

 ,

praseodim ()

Как регуляркой обрезать юникод за пределами U+FFFF (или починить его)

Всякие символы типа
🌨 🌡️ 🌬️→
Надо или вырезать целиком или починить, чтобы символы отображались в терминале. Минт 17.3 в браузере все работает.

 , ,

crutch_master ()

регулярки и поиск по условию

Дано строка

123;345;567

Нужно выцепить отдельно первое значение, отдельно второе, отдельно третье

Пишу:

цифры от 0 до 9 три раза искать до первого «;» один раз.

(([0-9]{3})(?=;)){1}

В результате выделяет два значения.

Как выбрать второе и третье?

 ,

sniper21 ()

Выделение числа из строки в выводе команды (Bash)

Приветствую всех. Имеется следующий скрипт:

#!/bin/sh
WAYSCAN=/usr/bin/wayland-scanner
WAYLAND_PROTOS=/usr/share/wayland-protocols
OUTPUT=gfx/common/wayland

if [ ! -d $WAYLAND_PROTOS ]; then
    WAYSCAN=/usr/local/bin/wayland-scanner
    WAYLAND_PROTOS=/usr/local/share/wayland-protocols
fi

if [ ! -d $OUTPUT ]; then
    mkdir $OUTPUT
fi

В переменной WAYSCAN хранится путь к утилите wayland-scanner. Необходимо получить версию этой утилиты и поместить её в другую переменную, однако вывод wayland-scanner --version выводит строку wayland-scanner 1.16.0. Мне нужно из этой строки выделить только число. Знаю что это можно сделать с помощью регулярки, но как не пытался - не получается. Может кто подсказать решение, пожалуйста? Только чтобы работало как в Linux, так и BSD

 , ,

Sunderland93 ()

Позор дебианщикам

Ну вот что это такое?

Получено 111 MB за 3мин 17с (567 kB/s)                                                                                                 
/usr/share/apt-listchanges/apt_listchanges.py:540: FutureWarning: Possible nested set at position 25
  email_re = re.compile(r'([a-zA-Z0-9_\+\-\.]+)@(([[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)')
И с учётом того, что сейчас как раз заморозка — эта дрянь наверняка просочится в новый штабле. Опять страдать будете, штаблеводы? :3

Ящитаю, валидация мыл регулярками не имеет смысла вообще, ибо существование мыла надёжно проверяется только отправкой токена на него + иногда временными костыльными способами у конкретных почтовиков; остальное — фуфло и оверинжиниринг. Максимум — можно наличие равлыка в строке проверить, потому что без него это не мыло 100%.

Я б пошёл дебианщикам пожаловался, но такое сплошь и рядом, толку-то. У них и без этого аврал. Поэтому притащил сюда, надо же наполнять толксы нетехническим контентом про Linux/Unix в противовес тому говну, которое толксозависимые сюда тащат.

 , , ,

Moondancer ()

Подскажите, пожалуйста, нормализующее регулярное выражение для чисел

Здравствуйте. Подскажите, пожалуйста, как регулярным выражением осуществить преобразование вида

1->01
2->02
3->03
...
9->09
10->10
11->11
...
100->100
и так далее

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

Или даже для этого специальная команда форматирования есть? Подскажите, пожалуйста.

 ,

piyavking ()

найти регулярной в строке совпадающий с паттернов кусок

странно, не работает. Почему?

cat test.sh

#!/bin/bash
T="this is base line"

[[ $T =~ "\bbase\b" ]] && echo "yes"

 ,

sniper21 ()

отрицание в регулярных выражениях

хочу отсеять *.sh скрипты чтобы не пролезали

nicefile.png

badfile.sh

Хочу это делать с конца строки, это возможно при помощи отрицания ^(?!sh)$ + обратного просмотра ^(?<!sh)$ ?

проверяю в онлайн проверяльщике, но не работает.

 

sniper21 ()

регулярной исключить цифру в начале имени файла

[^0-9] - это исключить от 0 до 9

а как указать, что-то относится только к первому символу?

 

sniper21 ()

Выбрать числа из строки

Сап лор, знаю здесь местные эксперты боги регекспов. Есть такая строка

{"min": 12, "max": "123", bla"blabla"12d""123":_blabla}
Как из нее выбрать только трехзначные числа в двойных кавычках?

 ,

cr0 ()

RegExp - помогите с awk - надо отфильтровать после sort список адресов по времени соединения..

Привет! Отсортировал логи по времени и мак адресам, список получился внушительный. По времени первая колонка сортирует заходы по mac адресам сверху вниз (ну как надо в общем). Хочу оставить только время захода и время последнего соединения. Выглядит это так:

grep 'subscribe' sml.log |awk -F/ '{print $1 $2 $3 "Mac: " $5}' | sed 's/.*\[//; s/+0300\]."GET//; /HTTP/d' | sort -k2

16Aug2018:18:12:10 Mac: 00:02:9B:A0:35:5C
16Aug2018:18:12:20 Mac: 00:02:9B:A0:35:5C
16Aug2018:18:12:30 Mac: 00:02:9B:A0:35:5C
16Aug2018:18:12:40 Mac: 00:02:9B:A0:35:5C
16Aug2018:18:12:50 Mac: 00:02:9B:A0:35:5C
16Aug2018:18:13:01 Mac: 00:02:9B:A0:35:5C
16Aug2018:18:13:11 Mac: 00:02:9B:A0:35:5C
16Aug2018:18:13:21 Mac: 00:02:9B:A0:35:5C
16Aug2018:06:27:26 Mac: 00:02:9B:A0:36:25
16Aug2018:06:27:37 Mac: 00:02:9B:A0:36:25
16Aug2018:06:27:48 Mac: 00:02:9B:A0:36:25
16Aug2018:06:27:58 Mac: 00:02:9B:A0:36:25
Пытаюсь фильтровать с помощью awk (дописываю после пайпы):

awk '!($2 in a) {if (a[$2] == a[$2]++)a[$2]--; print;  a[$2]; print ; a[$2]++; print; print "===="}'

но фигня какая-то..
====
16Aug2018:06:27:34 E4:27:71:70:42:42
16Aug2018:06:27:34 E4:27:71:70:42:42
16Aug2018:06:27:34 E4:27:71:70:42:42
====
16Aug2018:06:27:26 F4:27:71:1F:09:FF
16Aug2018:06:27:26 F4:27:71:1F:09:FF
16Aug2018:06:27:26 F4:27:71:1F:09:FF
====
одинаковые первые строки пишет, тоже самое что и print $0 в awk. Посоветуйте как правильно решить по логике, что -то не так делаю явно!

 , , , ,

kaurych ()

QRegularExpression сделать аналог split

Добрый день.
Имеется код:

QString st = "1,2,3,4,5-6,7,8,9";
QRegularExpression regexp("(?:\\,|^)\\d+(?:\\,|$)");
QRegularExpressionMatchIterator i = regexp.globalMatch(st);
while (i.hasNext())
    qDebug() << i.next().capturedTexts();
Вывод:
("1,")
(",3,")
(",7,")
(",9")
Вопрос: как бы мне сделать так, чтобы получить в результатах также подстроки:
",2,"
",4,"
",8,"
?

 , ,

rumgot ()

Помогите с регуляркой

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

Например, если набор [a-zа-я0-9], то удалить:
apk!!**lol
地方的脱贫攻坚答卷
地方的脱7777贫攻坚答卷

а вот это оставить:
apkжэш
7776654
linux

Перемещено leave из talks

 ,

E2-E4 ()

Вопрос по регулярным выражениям

Нужно удалить однострочный коментарий с коде написаном на С. Буду юзать sed, но проблема с регулярным выражением в некоторыйх случаях:

srt url = "http://google.ru"//Какойто комеентарий 
srt url2 = 'http://google.ru' //Какойто комеентарий 
srt url3 = "http://google.ru" //+"/search" //Какойто комеентарий 

Каким регулярным выражением отловить данные случаи? Покачто получилось (\'[^']*\'|\«[^»]*\")?(\/\/.*)? Первая группы ловит строки а вторая ловит какраз комеентарии. Вот только как телперь в sed заменить 2 группу пробелом? Если у вас другой способ решения задачи буду рад.

 

ibahob ()

Получить значение из файла, посчитать и заменить в файле через консоль

Приветствую всех зашедших, прошу помощи в следующей задаче.

Есть файл: /path/data.txt

В файле текстовое содержимое:

Hello this is some text
text text value:100 text text
Still some text

Размер текста около 80-100 Kb (возможно для какого-то решения размер будет иметь значение)

Вопрос. Как с помощью командной строки сделать следующее:
1. Получить из файла /path/data.txt текст value:100
2. Прибавить к полученным 100 еще 50 (получить 150). Цифра 50 должна назначаться через аргумент и может являться любым целым числом.
3. Заменить value:100 на value:150 в вышеуказанном файле.

Следующая информация может оказаться полезной:
- Номер строки, где размещено изначальное значение value:100 известно заранее. То есть не нужно искать по всему файлу.
- Весь другой текст в файле меняется
- Эти команды будут выполняться бесконечно в фоновом режиме. То есть скорость выполнения и нагрузка имеет значение.

И при всех этих действиях не ругаться, если такого файла не оказалось или в файле не оказалось такой value:100. То есть просто проигнорировать.

Если у кого есть решение, прошу подсказать. Спасибо

 , ,

antobra ()

передача строкового параметра скрипту

Доброго времени суток. Такая ситуация, написал скрипт, который в текущей дир. позволяет искать заданную строку($1) и сохранять где нашел и номера строк в файл(имя файла $2) со строками все прекрасно работает

#!/bin/bash
#$1 последовательсность для поиска
#$2 имя файла результатов

export files=$(ls ./);
files=$(echo -e "$files" | sed "s/num4.sh//");
touch "$2.txt";

for name in $files
do
echo "File name: "$name >> "./$2.txt"
step=$(grep -n -s -i -o "$1" "$name")
# номер строки.под ошибок.игн регистр.поиск только совпавшегокуска
	if [[ -n $step ]]
	then
	step=$(echo "$step" | sed "s%$1%%gi")
	step=$(echo "$step" | sed -E "s%:%;%g" )
#регулярка
	echo "Pattern was finding in line(s) "$step >> "./$2.txt"
	else
	echo "Pattern was not finding" >> "./$2.txt"
	fi
done

echo "Done! U can see results in same sirectory in file: $2.txt"

возникает проблема с выражениями типа: («^

host1@host1-VB:~/Рабочий стол/4.4$ ./num4.sh (*^ result
bash: синтаксическая ошибка рядом с неожиданным маркером «*^»
Добавил кавычки-заработало
host1@host1-VB:~/Рабочий стол/4.4$ ./num4.sh "(*^" result
Done! U can see results in same sirectory in file: result.txt
возникла другая проблема с выражениями типа: 78#@!~?
host1@host1-VB:~/Рабочий стол/4.4$ ./num4.sh "78#@!~?" result
bash: !~?: event not found
Можно как-то отключить в передаче параметров все выражения и воспринимать их только как текст? Поскольку задание говорит, что поиск должен быть абсолютно любой последовательности символов нужно как-то это решить..

Спасибо!

 , ,

dmanev ()

Хочу изучить регулярные выражения

Добрый день, ЛОР.

Так сложилось, что мне приходится много работать с текстом, хотелось бы освоить регулярные выражения. В связи с этим 2 вопроса:

1. Какую разновидность RE изучать?

2. Какую литературу (теория и задачи на закрепление) посоветуете для того, чтобы получить максимум результата за 2-3 дня?

 

aquadon ()

Регулярные выражения в sed

Добрый день. Встала тут такая задача: есть текстовик с относительными ссылками на файлы, расположенные на веб-сервере. Текстовик вида

<item id="blablabla" href="blablabla.html" media-type="blablabla"/>
<item id="blablabla2" href="directory/blablabla.html" media-type="blablabla"/>
надо превратить в формат «по ссылке на строку», чтобы потом его скормить wget-у. Как это сделать в текстовом редакторе через замену по регулярному выражению, либо средствами популярных языков вроде PHP, Java или даже Python — относительно понятно, однако мне бы хотелось оформить все это в виде скрипта. Я составил регулярку, однако совершенно не понял того, как вытащить значение второй по счету (.*)
/\<item id="(.*)" href="(.*)"(.*)>/g
Прошу помочь знающих людей

 , ,

kolyanok ()

Помогите с регуляркой

Ну туплю я невообразимо уже сил нет, помогите, да я спать наконец то уйду

есть такие куски

photo1[jj] = '/upload/image/kresla/Kresla_dlya_peregovornix_zon/Norway/norway1.jpg';
namepr1[jj] = '';
zakpr1[jj++] = '';

photo1[jj] = '/upload/image/kresla/Kresla_dlya_peregovornix_zon/Norway/norway2.jpg';

надо на для preg_math_all() пхп написать регулярку, выделить

/upload/image/kresla/Kresla_dlya_peregovornix_zon/Norway/norway2.jpg

говлова не варит, от слова совсем, так как сон нам только снился, списите пасаны :D

Решено

preg_match_all("/([^']+)'/",$str,$array);

 ,

Dron ()