Вам необходимо установить заголовки ядра:
sudo apt-get install linux-headers-$(uname -r)
awk
может работать. Примерно так:
awk -v RS='^Package ' '/android\.permission\.CAMERA/ {print $1}'
Предполагается, что строка, начинающаяся с Package
, обозначает начало описания нового приложения.
Если посмотреть на фактическое содержимое, строки начинаются не с пакета
, а с пакета
- с отступом в два пробела. Таким образом, должно работать следующее:
awk -v RS='\n +Package' '/android\.permission\.CAMERA/{print $1}'
Это помечает новую строку, за которой следует любое количество пробелов и Пакет
в качестве разделителя записей, и отфильтровывает те записи, содержащие android.permission.CAMERA
. Первое поле - это имя пакета. И Проверяющие:
будут напечатаны, потому что разрешение указано перед началом описания пакетов.
perl -nE '/Package \[([^\]]+)/ and $p=$1; /android.permission.CAMERA/ and say $p' datfile
Таким образом, это соответствует строкам Package [...]
(сохраняя имя пакета в $ p
в качестве обратной ссылки переменная $ 1
будет сильно затерта); если отображается строка CAMERA
, выдать содержимое $ p
.(Это приведет к ошибке с неинициализированным предупреждающим сообщением, если перед первой строкой пакета появится строка CAMERA
, что исправит ведущее подопределение BEGIN {$ p = "dunno"}
. ) Это также должно быть довольно легко сделать в awk
, но я не думаю, что в awk
.
(Если бы входные данные были разделены пустой строкой, то в моем ответе, вероятно, был бы задействован ivocation perl -00
( perldoc perlrun
).)