Строка Bash Regex -не должна начинаться и заканчиваться точкой

Конечно, вы можете копировать файлы напрямую из /home/user/whatever в /dev/sdb, если у вас есть права записи на необработанное устройство. Однако, поскольку теперь вы обходите файловую систему на этом устройстве, у вас будет просто поток байтов в /dev/sdb. Файловая система FAT, NTFS или ext4, которая была раньше, теперь исчезла, поскольку вы не прошли через драйвер файловой системы. Если вы смонтировали устройство перед копированием, драйвер позаботится о деталях файловой системы. Кроме того, вы не делаете двойную копию, поскольку каталог не существует независимо от устройства.

2
27.09.2021, 00:34
3 ответа

Если вы хотите сделать это в bash, это один из подходов:

IFS="." read -ra words <<<"$input"
if ((${#words[@]} == 3)) && [[ $input !=.* && $input != *. ]]; then
    echo "valid input"
fi

Здесь на самом деле используются значения из массива слов:

IFS="." read -ra words <<<"$input"
# 3 dot-separated fields, and the first and last cannot be empty
if ((${#words[@]} == 3)) && [[ -n ${words[0]} && -n ${words[2]} ]]; then
    echo "valid input"
fi
-1
27.09.2021, 02:36

Я думаю, вы ищете это регулярное выражение ^[^.]\+\.[^.]\+\.[^.]\+$, в этом примере мы будем использоватьgrep:

Символы внутри квадратных скобок обрабатываются буквально (, за исключением -), поэтому вам не нужно экранировать точку.

$ echo ".a.b.c." | grep  "^[^.]\+\.[^.]\+\.[^.]\+$"
$ echo ".a.b.c"  | grep  "^[^.]\+\.[^.]\+\.[^.]\+$"
$ echo "a.b.c."  | grep  "^[^.]\+\.[^.]\+\.[^.]\+$"
$ echo "a..c"    | grep  "^[^.]\+\.[^.]\+\.[^.]\+$"
$ echo "a.b.c"   | grep  "^[^.]\+\.[^.]\+\.[^.]\+$"
a.b.c

Регулярное выражение говорит

  • Строка должна начинаться с одного или нескольких символов, не являющихся точками, за которыми следует точка ^[^.]\+\., затем один или несколько символов, не являющихся точками, и точка [^.]\+\., за которыми следует один или несколько символов, не являющихся точками. не точки [^.]\+$до конца строки.
5
27.09.2021, 02:39

В awk мы можем сделать это:

$ awk '  $0"."  ~   /^([^.]+\.){3}$/  ' file

a.b.c
abc.def.xyz

Добавление точки в конце делает шаблон повторяющимся, всего три раза not-dot, за которым следует dot. Подобно а.--б.--в. или абв.--опр.--хиз.

Или, говоря языком регулярных выражений,:([^.]\.){3}

Принимается только в том случае, если регулярное выражение соответствует всей строке.

1
06.10.2021, 03:01

Теги

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