2016-12-22 2 views
0

У меня есть файл, и мне нужно извлечь некоторые данные. проблема, с которой я сталкиваюсь, - это некоторая строка, которая почти не отличается от других строк. вот пример:извлечение данных из текстового файла с помощью linux

action=accept trandisp=noop srcip=1.1.1.1 dstip=2.2.2.2 service=PING proto=1 duration=61 
action=accept trandisp=noop srcip=1.1.1.1 dstip=3.3.3.3 dstport=80 service=http proto=1 duration=61 

Я хочу, чтобы получить IP-адрес назначения с сервисом в первом ряду, и назначения IP с dstport и обслуживания во второй строке.

Я новичок в Linux, и я попробовал его с grep и разрезал, но это не сработало для меня. , пожалуйста, помогите мне с объяснением вашего ответа.

+1

Можем ли мы, что вы пробовали? Также [this] (http://stackoverflow.com/questions/17291557/extract-strings-in-a-text-file-using-grep) может быть полезно –

+0

Хороший случай для 'gawk' (или, возможно,' perl') , или, может быть, 'sed' –

ответ

0

Как насчет этого?
grep -o -P "dstip=[0-9.]+ (dstport=[0-9]+)? service=\w+ (dstport=[0-9]+)?" your-file

Объяснение:

-o, --only-matching  show only the part of a line matching PATTERN 
-P, --perl-regexp   PATTERN is a Perl regular expression 

Конечно, порядок имеет ключ-значение.

+0

Это регулярное выражение perl. «+» Означает один или несколько и применяется к '[0-9.]'. «?» Означает «нет» или «один» и применяется к «(dstport = [0-9] + service = \ w +)». – rdupz

+0

Ничего себе это хорошо работает, но + что это за, а также (dstport = [0-9] + service = \ w +)? ...() .. \ w + ... и вопросительный знак ... еще одна вещь иногда слушается перед dstport. есть ли какая-нибудь работа для этого ... спасибо –

+0

grep, если строка не имеет [dstport = xx], как показано в первой строке файла, которую я отправил, она будет печатать только [dstip] и игнорировать [service = ПИНГ]. также когда я отправляю вывод в файл, он не печатает новые строки. –

Смежные вопросы