[[:alnum:]]*
변수에 파이프로 구분된 문자열을 설정하기 위한 신뢰할 수 있는 정규식은 무엇입니까? 정규식은 변수가 설정되지 않은 경우도 다루어야 합니다.
승인됨:
var="abc123|A1B2C3|sDsdSS|"
var="abc123|A1B2C3"
var="abc123"
var=""
어쩌면 일부 중복 파이프도 작동할 수 있습니다(내 지원 grep
).
var="|||r44fDs||fe4REee|||"
입력 파일에서 특정 줄을 제외하기 위해 나중에 스크립트에서 이 "var" 목록을 사용합니다.
grep -vE "^(${var}) " input > input.filtered
내 정규식은 공백으로 구분된 특수 문자도 반환하는데, 이는 나에게 적합하지 않은 것 같습니다.
$ 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
$
답변1
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
답변2
오직:
grep -x '[[:alnum:]|]*'
즉, 0개 이상의 alnum 또는 |
. -E
여기서는 정규식을 확장( )할 필요가 없습니다 . 이 구문은 기본 정규식과 확장 정규식 모두에 유효합니다(PCRE 및 대부분의 다른 정규식, 지원되지 않는 유일한 정규식은 [:alnum:]
POSIX 문자 클래스입니다).
누락된 유일한 것은 -x
행 내에서 일치하는 항목을 찾는 대신 정규식이 전체 행에서 일치하도록 강제하는 옵션입니다. 정규식 중첩이 너무 멀리 진행되었습니다. |
구분된 필드가 null이 아니기를 원하는 경우 필요합니다.
grep -xE '[[:alnum:]]+(\|[[:alnum:]]+)*'
덜 명확하지만 기본 RE를 사용하여 이 작업을 수행할 수도 있습니다.
grep -x '[[:alnum:]]\{1,\}\(|[[:alnum:]]\{1,\}\)*'
답변3
이것은 작동합니다:
var='^[[:alnum:]|]*$'