2014-09-24 3 views
-1

У меня есть два файла. Я хочу, чтобы удалить все строки (в url.txt) от log.txtУдалить все строки, содержащие несколько строк, используя sed

Первый файл url.txt

google.com 
bing.com 
yahoo.com 

Второй файл log.txt

1.2.3 www.google.com bot 
    626.7.7 www.yahoo.com browser 
    35.5.6 www.test.com search 
    44.6.6 www.bing.com web 

Я хочу, чтобы этот вывод:

35.5.6 www.test.com search 

этот код работает для строки, но я хочу удалить все строки (в url.txt) от log.txt

sed -i '/$string/d' log.txt 

ответ

2
awk 'NR==FNR{urls["www."$1]; next} !($2 in urls)' url.txt log.txt 

выше будет соответствовать только по конкретному адресу в конкретной желаемой области log.txt

6

Вы можете использовать этот grep -v:

grep -vwFf url.txt log.txt 
35.5.6 www.test.com search 
+1

Это будет неправильно удалять более длинные URL-адреса, если они присутствуют, например. если log.txt содержит '44.6.6 www.stabbing.com web', который будет соответствовать' bing.com'. Вам нужно добавить '-w' arg для grep. Это все еще оставляет вам проблему, что она ложно удалит строку типа '44.6.6 www.stabbing.com, рад, что это не bing.com', так как она не соответствует ни одному определенному полю, но это может и не быть проблемой. –

+1

Спасибо Ed, я добавил -w в эту команду grep. – anubhava

+1

понимайте свою точку зрения, но не говорите, что stabbing.com должен храниться. он говорит, что «вся строка» не ограничивается корневым доменом. И «bing.com.phising.to» (возможно, надеюсь) удаляется (но вы сохраняете оба своих +1; -D) – NeronLeVelu

0

Расширение вашего sed сценарий, здесь расширенный скрипт для синтаксического анализа каждой строки в url.txt и удаления строки корреляции в log.txt

while read string 
do 
    sed -i '/$string/d' log.txt 
done < url.txt 
Смежные вопросы