“Если переменная не содержит” не работу

[113733] Вариант [114239] -перл-регэкспресс[114240] (сокращенно [114241]-P[114242]) GNU [114243]grep[114244] использует более мощные регулярные выражения, которые включают в себя шаблоны "взгляд в будущее". Следующий паттерн ищет каждую букву, которой нет в остальном слове:

Однако поведение во время выполнения довольно плохо, так как [114245]\w*[114246] может иметь почти неограниченную длину. Она может быть ограничена [114247]\w{,8}[114248], но это также проверяет и за пределами слова, ограниченного 10 буквами. Поэтому следующий шаблон сначала проверяет правильную длину слова:

В качестве тестового файла я использовал большой ≈ файл 500 MB:

Первый шаблон: ≈ 43 с

Поздний шаблон: ≈ 15 с

Обновление:

set selection=exclusive
set virtualedit+=onemore
" this is just a crude proof of concept with theoretically addressable weak points
nnoremap vd <Nop>
noremap p P
noremap a i
" make i<Esc> not move the cursor
inoremap <Esc> <Right><Esc>

Я не смог найти существенного изменения в поведении во время выполнения для не жадного оператора ([114255]\w*?[114256]) или опоссузионного оператора ([114257](...){10}+[114258]). Немного быстрее кажется, что замена опции [114259]-w[114260]:

Обновление grep из версии 2.13 в 2.18 оказалось гораздо эффективнее. Тестовый файл взял только ≈ 6 с.[113746].

2
09.12.2014, 01:29
2 ответа

Вы должны сделать так:

[ -n "${url%%*.txt}" ] && 
echo "\$url is not null and does not end with the string '.txt'"
0
27.01.2020, 22:13

Правильным оператором неравенства является !=. Смотрите ниже:

url=/heads/paths/lol.txt
if [[ $url != *.txt ]] ; then echo "does not contain txt"; else echo "contains txt"; fi

Это дает:

contains txt

ref: http://tldp.org/LDP/abs/html/comparison-ops.html

2
27.01.2020, 22:13

Теги

Похожие вопросы