Как использовать grep, когда файл не содержит строку

В Emacs, “близко” часто называется, “уничтожают” или “удаляют”. Команда для закрытия кадра delete-frame, связанный с C-x 5 0 по умолчанию. C-x 5 префикс для команд кадра.

Обратите внимание, что кадр, в терминологии Emacs, то, что большая часть мира называет окном; окно, в терминологии Emacs, то, что часть мира называет областью. (Кадры содержат одно или несколько окон, окна содержат, один или несколько разделяет на области.) Понятие, которое соответствует файлу или приложению, работающему в Emacs, является буфером. В любое время каждое окно показывает буфер, и буфер можно показать в одном или нескольких кадрах или ни одном вообще. В отличие от большинства других приложений мультидокумента, Emacs не связывает отредактированные объекты (файлы и такой) к элементам пользовательского интерфейса (окна). Для закрытия файла или приложения уничтожьте буфер: kill-buffer, связанный с C-x k; ввести C-x k RET уничтожить текущий буфер.

Если Вы знаете название команды, можно узнать, с каким ключом (ключами) оно связывается путем выполнения where-is, который самостоятельно связывается с C-h w (C-h для справки — можно также ввести f1 — и w для, “где эта команда”). Так, например, для выяснения, что ключ delete-frame связывается с если таковые имеются, ввести C-h w delete-frame RET (как обычно, работы заполнения клавишей Tab).

Для выяснения, чем называют команду можно работать apropos-command (C-h a). Например, C-h a buffer RET показывает список команд, имя которых содержит “буфер” (существуют многие из тех), с короткой сводкой справки для каждого. Если Вы уже определили местоположение команды в меню, можно нажать C-h k (describe-key) затем нажмите на запись меню, и это покажет справку для команды. Если Вы нажимаете C-h c (describe-key-briefly), Emacs покажет просто название команды в строке сообщения. В дополнение к функциям самодокументирования можно, конечно, искать вещи в руководстве (C-h r прочитать руководство).

29
16.10.2015, 04:47
5 ответов

grep вернет успех, если найдет хотя бы один экземпляр шаблона, и ошибку, если нет. Таким образом, вы можете либо добавить предложение else , если хотите, чтобы выводились как «выполняет», так и «не выполняет», либо вы можете просто отменить условие if , чтобы получать только ошибки. Пример каждого из них:

if grep -q "$user2" /etc/passwd; then
    echo "User does exist!!"
else
    echo "User does not exist!!"
fi

if ! grep -q "$user2" /etc/passwd; then
    echo "User does not exist!!"
fi
52
27.01.2020, 19:38

Альтернативой является поиск статуса выхода grep. Например:

grep -q "$user2" /etc/passwd
if [[ $? != 0 ]]; then
    echo "User does not exist!!"

Если grepне найдет соответствия, он выйдет из 1, поэтому $?будет 1. grepвсегда будет возвращать 0в случае успеха. Так что безопаснее использовать $? != 0, чем $? == 1.

3
27.01.2020, 19:38

Вы можете использовать параметр grep "-L / --файлы -без соответствия -" , чтобы проверить, не содержит ли файл строку:

if [[ $(grep -L "$user2" /etc/passwd) ]]; then   
  echo "User does not exist!!"; 
fi
10
27.01.2020, 19:38

Я решаю это простым лайнером:

for f in *.txt; do grep "tasks:" $f || echo $f; done

Команда проверит все файлы в каталоге с расширением txt и либо запишет строку поиска (, т.е. «задачи :» ), если найдена, либо имя файла.

1
27.01.2020, 19:38
grep -q query_text./file.txt && echo true || echo false
2
16.03.2021, 01:19

Теги

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