Как я могу удостовериться, что строка Bash является алфавитно-цифровой без подчеркивания?

CLR использует его, когда это компилирует во времени выполнения. Вот ссылка на MSDN, который объясняет далее.

7
задан Raam Dev 4 August 2009 в 18:49
поделиться

4 ответа

Похоже, это должно сделать это:

^[a-zA-Z0-9][-a-zA-Z0-9]{0,61}[a-zA-Z0-9]$

Сопоставьте любой буквенно-цифровой символ, затем сопоставьте до 61 буквенно-цифрового символа (включая дефисы), затем сопоставьте любой буквенно-цифровой символ. Минимальная длина строки - 2, максимальная - 63. Он не работает с Unicode. Если вам нужно, чтобы он работал с Unicode, вам нужно будет добавить другие классы символов вместо a-zA-Z0-9 , но принцип будет тот же.

Я считаю правильным ] grep выражение, которое будет работать с Unicode:

^[[:alnum:]][-[:alnum:]]{0,61}[[:alnum:]]$

Пример использования:


echo 123-abc-098-xyz | grep -E '^[[:alnum:]][-[:alnum:]]{0,61}[[:alnum:]]$'

result=$(grep -E '^[[:alnum:]][-[:alnum:]]{0,61}[[:alnum:]]$' <<< "this-will-work"); echo $result;

echo "***_this_will_not_match_***" | grep -E '^[[:alnum:]][-[:alnum:]]{0,61}[[:alnum:]]$'
16
ответ дан 6 December 2019 в 09:21
поделиться

Это сценарий bash, проверяющий первый параметр, содержит ли он только буквенно-цифровые символы или дефисы. Он «перенаправляет» содержимое $ 1 в grep:

#!/bin/bash
if grep '^[-0-9a-zA-Z]*$' <<<$1 ;
  then echo ok;
  else echo ko;
fi
2
ответ дан 6 December 2019 в 09:21
поделиться

Это последний, который вам нужен: sed -e 's / [^ [: alnum:] | -] // g'

1
ответ дан 6 December 2019 в 09:21
поделиться

вы можете сделать это с помощью просто bash

string="-sdfsf"
length=${#string}
if [ $length -lt 2 -o $length -gt 63 ] ;then
    echo "length invalid"
    exit
fi
case $string in
    -* ) echo "not ok : start with hyphen";exit ;;    
    *- ) echo "not ok : end with hyphen";exit ;;   
    *[^a-zA-Z0-9-]* ) echo "not ok : special character";exit;; 
esac
1
ответ дан 6 December 2019 в 09:21
поделиться
Другие вопросы по тегам:

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