Regex для разделенных трубкой [[:alnum:]]* списков

каков надежный regex для разделенных трубкой [[:alnum:]]* строк, установленных в переменной? regex должен также охватывать случай, когда переменная не установлена.

принято:

var="abc123|A1B2C3|sDsdSS|"
var="abc123|A1B2C3"
var="abc123"
var=""

и, возможно, также некоторые лишние трубы в порядке (поддерживается в моем grep):

var="|||r44fDs||fe4REee|||"

Я использую этот список "var" позже в моем скрипте, чтобы исключить заданные строки из входного файла:

grep -vE "^(${var}) " input > input.filtered

Мой regex возвращает также разделенные пробелами и специальные символы, которые не в порядке для меня:

$ echo -e "sfsfds|sfsf|sfdsf|||\ns@ds|fsfsf|fssfsdf|sfsdfdfs\nsdfsdfsfs\nafafafs sdfsfd dfsfsfs\n"|grep -E '([[:alnum:]]*\|*)*'
sfsfds|sfsf|sfdsf|||
s@ds|fsfsf|fssfsdf|sfsdfdfs
sdfsdfsfs
afafafs sdfsfd dfsfsfs

$
0
18.03.2018, 14:31
3 ответа

grep раствор:

Образецinput.txt:

sfsfds|sfsf|sfdsf|||
s@ds|fsfsf|fssfsdf|sfsdfdfs
sdfsdfsfs
afafafs sdfsfd dfsfsfs

var='^[[:alnum:]]+[[:alnum:]\|]*$'
grep -E "$var" input.txt

Выход:

sfsfds|sfsf|sfdsf|||
sdfsdfsfs
1
28.01.2020, 02:32

Это должно работать:

var='^[[:alnum:]|]*$'
0
28.01.2020, 02:32

Просто:

grep -x '[[:alnum:]|]*'

То есть любая последовательность из 0 или более выпусков или |. Здесь вам не нужны расширенные(-E)регулярные выражения. Этот синтаксис действителен как в базовых, так и в расширенных регулярных выражениях (, а также в PCRE и большинстве других регулярных выражений, единственное, что может не поддерживаться в некоторых, это [:alnum:]класс символов POSIX ).

Единственное, что отсутствовало у вас, — это опция -x, чтобы заставить регулярное выражение сопоставляться со всей строкой, а не сопоставляться внутри строки. Вложение регулярных выражений было излишним. Вам это понадобится, если вы хотите, чтобы |поля с разделителями были не -пустыми:

grep -xE '[[:alnum:]]+(\|[[:alnum:]]+)*'

Это также можно сделать с помощью базовых RE, хотя и менее разборчиво:

grep -x '[[:alnum:]]\{1,\}\(|[[:alnum:]]\{1,\}\)*'
1
28.01.2020, 02:32

Теги

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