извлекая-The-значения-с помощью-Grep - PullRequest
1 голос
/ 03 ноября 2010

С извлечение значений с помощью grep

Reading:RG1:+ /user/reading-2/Monday:12
Reading:RG1:- /user/**/Friday:12
Reading:RG1:- /user/**/*.txt:12
Reading:RG1:- /user/tet-23/**/*.txt:12
Reading:RG2:+ /user/reading-2/Monday:12
Reading:RG2:- /user/**/Friday:12
Reading:RG2:- /user/**/*.txt:12
Reading:RG2:- /user/tet-23/**/*.txt:12

Я пытался с этим: кот a.txt | grep RG1 | grep '-' | cut -d ':' -f3- | cut -d'- '-f2 | sed -e' s / // '

Это не сработает, потому что он извлечет неправильный путь, потому что некоторые из + также имеют -

Как решить эту проблему

Ответы [ 5 ]

2 голосов
/ 03 ноября 2010

Попробуйте:

egrep "^[^:]*:RG1:-" a.txt | cut -d: -f3 | cut -b3-

Пример выполнения:

$ cat a.txt 
Reading:RG1:+ /user/reading-2/Monday:12
Reading:RG1:- /user/**/Friday:12
Reading:RG1:- /user/**/*.txt:12
Reading:RG1:- /user/tet-23/**/*.txt:12
Reading:RG2:- /user/tet-23/**/*.txt:12
Reading:RG2:+ /user/reading-2/Monday:12
$ egrep "^[^:]*:RG1:-" a.txt | cut -d: -f3 | cut -b3-
/user/**/Friday
/user/**/*.txt
/user/tet-23/**/*.txt

"^[^:]*:RG1:-" означает «начать с чего угодно, кроме : ноль или более раз, затем :,затем RG1, затем -.

1 голос
/ 03 ноября 2010

Попробуйте с помощью sed

sed -r -e '/:RG1:/s/.*:[+-] //;s/:[0-9]+$//' a.txt

, который будет работать только на линиях с :RG1: в них.Вы можете обобщить это для всех строк:

sed -r -e 's/.*:[+-] //;s/:[0-9]+$//' a.txt

Или просто строки с RG и числом

sed -r -e '/:RG[0-9]+:/s/.*:[+-] //;s/:[0-9]+$//' a.txt

Если вы хотите сохранить трейлинг: 12 просто пропустите окончательную замену, например:

sed -r -e '/:RG[0-9]+:/s/.*:[+-] //' a.txt
1 голос
/ 03 ноября 2010

Вы можете попытаться получить полную строку "RG1:+", а затем разрезать на пробел, например:

grep "RG1:+" a.txt | cut -d" " -f2
0 голосов
/ 03 ноября 2010

Попробуйте этот вариант ответа на мой предыдущий вопрос:

grep -Po '(?<=RG1:- ).*(?=:\d*$)' a.txt 
0 голосов
/ 03 ноября 2010

Если разрешен Perl
- или +

perl -nE 'say $1 if /\AReading:RG[1-9]:[+-]\s+(.*)\Z/' file

только -

perl -nE 'say $1 if /\AReading:RG[1-9]:-\s+(.*)\Z/' file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...