Во-первых, вам не следует анализировать вывод ls
. Помимо этого, я собираюсь ответить на ваш вопрос относительно grep
.
Если вы настаиваете на использовании grep
, то вам нужно следующее:
grep -E "^[a-rt-zA-RT-Z][[:alnum:]]*m" file
На самом деле работает даже без-E
:
grep "^[a-rt-zA-RT-Z][[:alnum:]]*m" file
Это напечатает все, что начинается с чего-либо, кроме s
или S
, а затем любой буквенно-цифровой символ, который включает m
, и любые символы после этого, независимо от того, являются ли они m
или нет. По сути, это дает результат, который вы ищете.
Поскольку вы работаете с файлами, первое решение printf
выше намного лучше, так как оно не требует синтаксического анализа ls
. Вы можете использовать grep
выше с именами файлов, но я бы не советовал этого и рекомендовал использовать его с содержимым файлов или данных в стандартном выводе.
Вы также можете использовать find
для файлов, так как их не нужно анализировать:
find /path/to/directory -type f -name "*m*" -name "[!s]*"
В зависимости от вашей среды вам может понадобиться выйти из*
find /path/to directory -type f -name "\*m\*" -name "'[!s]\*"
Вы можете установить PS1 как
PS1='C:$PWD>'
$PWD
расширяется до текущего рабочего каталога.
Добавьте эту строку в ~/.bashrc
, чтобы сделать ее постоянной.