Наконец-то мне удалось снова запустить системный плагин на всех USB-устройствах. Я думаю, что это был тот момент, потому что я попробовал несколько thig :переустановить grub, проверить основной раздел и т. д. Спасибо всем, кто нашел время, чтобы помочь. Спасибо.
Это регулярное выражение кажется слишком сложным. Кроме того, вы должны использовать цитирование!
$ ls /dev | grep -E "tty[1-4]$"
tty1
tty2
tty3
tty4
Тем не менее, вы обязательно должны прочитать это:Почему *не *parse `ls`(и что делать вместо этого )?
bash-4.2$ ls -l /dev | grep -o "tty[1-4]$"
tty1
tty2
tty3
tty4
bash-4.2$ ls -l /dev | awk '/tty[1-4]$/{print $NF}'
tty1
tty2
tty3
tty4
bash-4.2$ output=$(ls /dev); echo "${output}" | grep "tty[1-4]$"
tty1
tty2
tty3
tty4
Причина несоответствия заключается в том, что вы ищете пробел(\s
)перед строкой tty
и в конце совпадения. Это никогда не происходит здесь, так как ls
будет печатать одну запись в строке. Обратите внимание, что ls
не совпадает с ls | command
. Когда вывод ls
передается по конвейеру, это активирует опцию -1
, заставляя ls
печатать только одну запись в строке. Это будет работать, как и ожидалось, если вы просто удалите эти\s
:
ls /dev | grep -E '([tty]+[0-4])'
Однако это также будет соответствовать всем вещам, которые вам не нужны. Это регулярное выражение совсем не то, что вам нужно. [ ]
составляют класс символов . Выражение [tty]+
эквивалентно [ty]+
и будет соответствовать одному или нескольким t
или y
. Это означает, что он будет соответствовать t
, или tttttttttttttttt
, или tytytytytytytytytyt
, или любой другой комбинации одной или обеих этих букв. Кроме того, круглые скобки здесь бессмысленны, они создают группу захвата , но вы ее не используете. То, что вы хотите, это:
$ ls /dev | grep '^tty[0-4]$'
tty0
tty1
tty2
tty3
tty4
Обратите внимание, как я добавил туда $
. Таким образом, выражение соответствует только tty
, а затем одному числу, одному из 1, 2, 3 или 4 до конца строки($
).
Конечно, безопасный способ сделать это, избегающий всех опасностей синтаксического анализа ls
, заключается в использовании вместо этого подстановок:
$ ls /dev/tty[0-4]
/dev/tty0 /dev/tty1 /dev/tty2 /dev/tty3 /dev/tty4
или просто
$ echo /dev/tty[0-4]
/dev/tty0 /dev/tty1 /dev/tty2 /dev/tty3 /dev/tty4