извлечение значений с помощью grep - PullRequest
1 голос
/ 01 ноября 2010

Пример строки: a.txt

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

Я хочу извлечь строку

after + or - what ever the string i want it 

используя:

cat a.txt | grep RG1|grep '+'| cut -d':' -f3| cut -d'+' -f2 |sed -e 's/ //

Я получаю / Пользователь / чтение / понедельник

Но я смотрю

/ пользователь / чтение / Понедельник: 12

Ответы [ 3 ]

3 голосов
/ 01 ноября 2010

Использование egrep -o:

$ egrep -o '/user/reading/[A-Z][a-z]+day:[0-9]+' a.txt
/user/reading/Monday:12
/user/reading/Friday:12

Редактировать : для вашего нового примера используйте что-то вроде

$ egrep -o '/user/[^ ]*:[0-9]+' a.txt
/user/reading/Monday:12
/user/**/Friday:12
/user/**/*.txt:12
/user/tet/**/*.txt:12

При условии отсутствия пробелов в ваших путях.

1 голос
/ 01 ноября 2010
$ grep -Po '(?<=[-+] ).*' a.txt
/user/reading/Monday:12
/user/**/Friday:12
/user/**/*.txt:12
/user/tet/**/*.txt:12

Измените символы в квадратных скобках, чтобы изменить выбранные строки.

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

Чтобы исправить вашу команду, используйте -f3-, потому что вы хотите все от 3-го поля до конца строки.

cat a.txt | grep RG1|grep '+'| cut -d':' -f3-| cut -d'+' -f2 |sed -e 's/ //'
...