Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[100.26.140.179] |
|
Сообщ.
#1
,
|
|
|
Добрый день, всем!
Есть файл со строками: [20:17] 15 "HTTP/1.1" 15 1124 [20:19] 15 "HTTP/1.0" 17 62646 [21:30] 15 "HTTP/1.0" 16 51651 [21:37] 15 "HTTP/1.1" 15 6152 ... Как вывести из файла все строки, не содержащие какую-то подстроку? Например, в данном случае "15" идущий 2й раз в строке. Пробовал $ grep -v 15 file.txt но результат не тот, что ожидал. Сейчас изменил на рег выр: $ grep -E "http\/1\.(1|0){1}\"\s((?!15)[0-9]*)\s\d+" file.txt выдало сообщение: -bash: !15: event not found Похоже, символ ! не нравится. |
Сообщ.
#2
,
|
|
|
У меня получилось так
cat file.txt | grep -v 15 |
Сообщ.
#3
,
|
|
|
Цитата YuriyRusinov @ У меня получилось так cat file.txt | grep -v 15 Изврат, зачем в пайпе передавать если это тоже самое. Вот так должно работать grep -v "15" file.txt Если не работает, значит автор делает что-то не так, либо пример не соответствует тому что там у него на самом деле. |
Сообщ.
#4
,
|
|
|
Да, прошу прощения - не корректно задал пример, т.к. сам по началу не разобрался в файле. Пример поправил.
|
Сообщ.
#5
,
|
|
|
Решил!
Вдруг кому-нибудь понадобится: $ grep -v -P "\"\s((15)[0-9]*)\s\d+" file.txt Всем спасибо за помощь |
Сообщ.
#6
,
|
|
|
Непонятно, зачем 15 взято в скобки, и почему вместо \d использовано [0-9]. Да и зачем вообще там скобки, тоже непонятно. Плюс после \d в конце тоже излишество
Вообще, я бы файл с такой структурой фильтровал бы не grep'ом, а при помощи awk. Awk разбивает строку на поля, поэтому можно было бы написать awk -- '$4 != 15 { print }' file.txt Добавлено Да, если там подразумевается не число 15, а строка, начинающаяся с 15, то придётся написать немного по-другому awk -- '$4 !~ /^15/ { print }' file.txt |