Если дана строка для сопоставления в файле, как вывести конкретную строку (строки), которая не встречается на определенном расстоянии от сопоставленной строки?

Вам необходимо установить заголовки ядра:

sudo apt-get install linux-headers-$(uname -r)
0
10.09.2015, 04:32
2 ответа

awk может работать. Примерно так:

awk -v RS='^Package ' '/android\.permission\.CAMERA/ {print $1}'

Предполагается, что строка, начинающаяся с Package , обозначает начало описания нового приложения.

Если посмотреть на фактическое содержимое, строки начинаются не с пакета , а с пакета - с отступом в два пробела. Таким образом, должно работать следующее:

awk -v RS='\n +Package' '/android\.permission\.CAMERA/{print $1}'

Это помечает новую строку, за которой следует любое количество пробелов и Пакет в качестве разделителя записей, и отфильтровывает те записи, содержащие android.permission.CAMERA . Первое поле - это имя пакета. И Проверяющие: будут напечатаны, потому что разрешение указано перед началом описания пакетов.

1
29.04.2021, 00:24
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 ).)

1
29.04.2021, 00:24

Теги

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