sed / awk - удалить из файла все, кроме определенного шаблона соответствия - PullRequest
3 голосов
/ 14 декабря 2010

Я хочу преобразовать make-файл следующим образом:

test.o: var_one.h var_two.h

test2.o: another_header.h var_three.h archive/something_random.h

в следующее:

test.o: var_one.h var_two.h

test2.o: var_three.h

т.е. я хочу удалить любое имя файла, которое не начинается со строки поиска"var_"

Не могу найти много информации для sed о сопоставлении с образцом, когда не нужна строка поиска?

1 Ответ

2 голосов
/ 14 декабря 2010

Вам действительно нужен awk для этого типа работы.С помощью sed попытка удалить слова, которые не соответствуют строке, была бы болезненным (и, вероятно, некрасивым) сценарием для записи.

awk '{for(i=2;i<=NF;i++)$i !~ /var_.*\.h/ && $i=""}1' Makefile

Ввод

$ cat Makefile
test.o: var_one.h var_two.h

test2.o: another_header.h var_three.h archive/something_random.h

Ввод

$ awk '{for(i=2;i<=NF;i++)$i !~ /var_.*\.h/ && $i=""}1' Makefile
test.o: var_one.h var_two.h

test2.o:  var_three.h
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...