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

Можно изменить настройки в настройках Клавиатуры терминала Gnome для создания

  • Ctrl+C = копия
  • Ctrl+V = вставка

Меню> Редактирование> Горячие клавиши... Gnome Keyboard Shortcuts Settings

Затем можно все еще нажать Shift, чтобы сделать независимо от того, что то сочетание клавиш обычно делало бы в терминале, например.

  • Ctrl+Shift+C = прерывание
  • Ctrl+Shift+V = литерал следующий символ

С другой стороны, Вы могли выработать привычку использования

  • Ctrl+Ins = копия
  • Shift+Del = сокращение
  • Shift+Ins = вставка

во всех приложениях, чтобы не когда-либо случайно нажатие Ctrl+C в Вашем терминале и иметь его прерывают программу вместо того, чтобы копировать некоторый текст. Те ярлыки относятся ко времени стандартов Стандартного пользовательского доступа IBM. Некоторые люди могли бы помнить их от РЕДАКТИРОВАНИЯ DOS.

2
29.10.2014, 01:57
4 ответа

Я также запускаю F20, и ваша версия немного отличается от моей.

ss1

Я бы предложил отменить его установку и попытаться переустановить. Если это не сработает, возможно, приложение сохранит информацию о конфигурации, возможно, в каталоге $ HOME/.config . Я бы попытался удалить любые файлы/каталоги, связанные с этим приложением, и попробовать запустить его с чистого листа.

Отслеживание кэшей приложений

Этот трюк можно использовать, чтобы узнать, к каким каталогам gnome-software обращается с помощью strace .

$ strace -s 2000 -o gnome-software.log gnome-software 

Затем grep можно просмотреть файл журнала gnome-software.log , чтобы узнать, к какому местоположению обращается приложение. Как правило, в приложениях GNOME файлы конфигурации находятся в разделе $ HOME/.config .

-121--186813-

короткий путь

sed 's/<\([^>]\+\)[0-9]\+>/<\1>/g' file
-121--82218-

Необходимо проверить, пуст ли $ file _ nm перед запуском grep

if [ -n "$file_nn" ];

возвращает True, если $ file _ nm НЕ пуст.

0
27.01.2020, 22:00

Вы могли бы значительно упростить это (и избежать неприятных проблем, присущих разбору ls), сделав что-то вроде:

file_nm=$(find . -maxdepth 1 -name "*abc*");
[ -e "$file_nm" ] && grep -q "search_txt" "$file_nm" &&
      echo "string found" ||
      echo "string not found"

Однако, как и в Вашем оригинальном примере, это не удастся, если у Вас более одного файла, совпадающего с *abc*. Поэтому, вместо этого, я бы использовал следующее:

for i in *abc*; do 
    grep -q "search_txt" "$i" && 
        echo "string found in $i" || 
        echo "string not found in $i"
done 

Если Вас не волнуют совпадения в нескольких файлах, и Вы просто хотите узнать, содержит ли какой-либо из файлов, соответствующих *abc* строку search_txt, Вы можете просто сделать

grep -q "search_txt" *abc* &&  echo "string found" || echo "string not found"
2
27.01.2020, 22:00

Есть несколько проблем, в том числе и с этим:

  • Ваш опубликованный код не висит
  • Вы используете флаг -l на ls, что означает, что вы будете искать файлы с именами -rw-r--r-- и такие
  • Вы должны вообще избегать разбора вывода ls

И нет необходимости тестировать вывод grep, вы можете просто использовать статус выхода. От man grep:

 EXIT STATUS
       The exit status is 0 if selected lines are found, and 1 if not found.

Вот упрощенная версия, которая делает то же самое:

if grep -q "search_txt" *abc*
then
  echo "string found"
else
  echo "string not found"
fi
0
27.01.2020, 22:00

Попробуйте:

grep "search_txt" /dev/null "$file_nm"

Кормление / dev / null - GREP сделает его работать, даже если $ file_nm не существует, потому что GREP всегда имеет хотя бы один файл - который является / dev / null - для работы.

2
27.01.2020, 22:00

Теги

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