grep -r "бананы" | вырезать -d: -f1 | xargs cat >> result.txt
grep
-r
: рекурсивный. Рекурсивно прочитать все файлы в каждом каталоге,Результат: имя_файла:текст
для каждой строки. Например, foo.txt:бананы
.
Теперь нам нужно получить имя файла из каждой строки.
вырез
Простой редактор для удаления части строки (вы можете использовать sed
или awk
здесь, но вырезать просто)
-d
разделитель. Поскольку у нас есть :
после файла, это наш разделитель: -d:
-f
мы разделили наш вывод на поля. Какой взять? -f1
-- первый!xargs
Теперь у нас есть список файлов. Что делать с ними? Мы используем xargs
, который создает и выполняет командные строки из стандартного ввода. Он принимает имя файла на стандартный ввод и запускает cat
для каждой строки, предоставляя имя файла в качестве параметра. А cat
просто выводит свое содержимое на стандартный вывод.
>>
означает "добавить в файл"
Проблема заключается в вашем ~ / .profile
, именно в этой строке:
export PATH='/usr/local/bin:$PATH'
Он должен быть записан в двойных кавычках:
export PATH="/usr/local/bin:$PATH"
Такая строка означает: определить переменную среды с именем PATH
, содержимое которой равно / usr / local / bin:
, за которым следует текущее значение PATH (то есть $ ПУТЬ
).
Если вы используете одинарные кавычки, значение PATH будет буквально / usr / local / bin: $ PATH
и $ PATH
больше не заменяется текущим значением. По сути, вы сужаете свой поиск по PATH до / usr / local / bin
, что, помимо прочего, объясняет, почему x-terminal-emulator
не найден.
Я исправил это, обновив всю систему и перезагрузив:
# apt-get update
# apt-get upgrade
# reboot