Команда 'grep' выводит целые строки, в которых появляется «оболочка». Не только слово «оболочка». Как видно ниже:
grep shell test.txt
for shell_A
shell_B
shell_C
Я бы рекомендовал использовать параметр
-o, --only-matching
Итак:
grep -o "shell" test.txt | wc -w
Много заимствований из ответа Денниса Каарсемейкера:
PROMPT_COMMAND='_abbrev_pwd=$(sed -e "s:$HOME:~:" -e "s:/\(.\)[^/]*:/\1:g" <<< "$(dirname "$PWD")")/"$(basename "$PWD")"'
PS1='\u@\h ${_abbrev_pwd}> '
Переменная PROMPT _COMMAND — это специальная переменная bash , которая выполняется каждый раз перед выводом подсказки. Код здесь устанавливает переменную с именем _abbrev_pwd
для конкатенации следующих элементов:
$(sed -e... <<<...)
/
$(basename "$PWD")
Сама команда sed принимает в качестве входных данных строку здесь -; что здесь строка -является результатом вызова dirname "$PWD"
для удаления текущего каталога. Затем эта строка подлежит двум заменам (, указанным в параметрах -e
sed ):
.
, затем любое количество не -косой черты -)косой чертой, за которой следует (захваченный )] один символ; повторите, что шаблон соответствует "глобально" с флагом g
. Я использовал :
в качестве разделителя поиска и замены sed
вместо обычного /
, чтобы избежать синдрома наклона зубочистки при попытке уйти от желаемого вперед косая черта. Наконец, мы настроили PS1 на использование переменной _abbrev_pwd
вместо $PWD
.