RegEx соответствует любой заглавной букве с любого алфавита [дубликат]

Это интересный вопрос и коснуться очень простой концепции в оболочке Борна и подоболочке. Здесь я предоставляю решение, отличное от предыдущих решений, делая какую-то фильтрацию. Я приведу пример, который может быть полезен в реальной жизни. Это фрагмент для проверки загруженных файлов, соответствующих знанию контрольных сумм. Файл контрольной суммы выглядит следующим образом (показано всего 3 строки):

49174 36326 dna_align_feature.txt.gz
54757     1 dna.txt.gz
55409  9971 exon_transcript.txt.gz

Сценарий оболочки:

#!/bin/sh

.....

failcnt=0 # this variable is only valid in the parent shell
#variable xx captures all the outputs from the while loop
xx=$(cat ${checkfile} | while read -r line; do
    num1=$(echo $line | awk '{print $1}')
    num2=$(echo $line | awk '{print $2}')
    fname=$(echo $line | awk '{print $3}')
    if [ -f "$fname" ]; then
        res=$(sum $fname)
        filegood=$(sum $fname | awk -v na=$num1 -v nb=$num2 -v fn=$fname '{ if (na == $1 && nb == $2) { print "TRUE"; } else { print "FALSE"; }}')
        if [ "$filegood" = "FALSE" ]; then
            failcnt=$(expr $failcnt + 1) # only in subshell
            echo "$fname BAD $failcnt"
        fi
    fi
done | tail -1) # I am only interested in the final result
# you can capture a whole bunch of texts and do further filtering
failcnt=${xx#* BAD } # I am only interested in the number
# this variable is in the parent shell
echo failcnt $failcnt
if [ $failcnt -gt 0 ]; then
    echo $failcnt files failed
else
    echo download successful
fi

Родитель и подоболочка обмениваются данными с помощью команды echo. Вы можете легко выбрать текст для родительской оболочки. Этот метод не нарушает ваш нормальный образ мышления, просто нужно выполнить некоторую пост-обработку. Для этого вы можете использовать grep, sed, awk и т. Д.

3
задан loostro 11 April 2014 в 21:55
поделиться

1 ответ

\w эквивалентен этому символьному классу:

[a-zA-Z0-9_]

Если вы хотите использовать только символы юникода в верхнем регистре, используйте этот класс символов:

'/[\p{Lu}\p{N}_]/u'

Это будет соответствовать любой из:

  1. Юникодовая буква верхнего регистра
  2. номер юникода
  3. Подчеркивание
5
ответ дан HamZa 22 August 2018 в 08:12
поделиться
  • 1
    Спасибо, я попробую. – loostro 11 April 2014 в 22:05
  • 2
    Это не работает. Здесь протестировано eval.in/135620 Я что-то забыл? – loostro 11 April 2014 в 22:12
  • 3
    @loostro Извините, я не могу открыть вашу ссылку. – p.s.w.g 11 April 2014 в 22:13
  • 4
    Nevermind, я просто понял это. Если я добавлю u (режим utf), он работает: /\p{Lu}/u. благодаря – loostro 11 April 2014 в 22:14
  • 5
    @loostro Ах, да. Я должен был включить это. Рад, что смог помочь. – p.s.w.g 11 April 2014 в 22:15
  • 6
    Мне действительно не нужен символ подчеркивания (хотя это и не повредит) в моем случае использования, но спасибо за объяснение того, что соответствует exacly \w. – loostro 11 April 2014 в 22:17
  • 7
    Вот почему я задал вам вопрос о \w, но вы сказали, что хотите получить эквивалент \w. – anubhava 11 April 2014 в 22:19
  • 8
    Интересно, что posix character class [[:upper:]] также, кажется, преобразуется в \p{Lu} при использовании u-модификатора, не ожидал, что: eval.in , regex101 – Jonny 5 12 April 2014 в 02:46
Другие вопросы по тегам:

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