여기 내 첫 번째 질문입니다! 나는 많은 grep을 시도했지만 여전히 내가 원하는 것을 찾지 못했습니다 ...
그래서 여기 있습니다.
내 Ubuntu 컴퓨터에 다음과 같은 내용이 포함 된 많은 파일이 있습니다.
{"group":{"name":"Subdivision01","id":"94827-20934-23085"}*manytext*
{"group":{"name":"Department28","id":"11672-23517-87241"}*manytext*
{"group":{"name":"Division07","id":"86267-91634-22516"}*manytext*
나는 Subdivision01
and Division05
and Departement14
(길이가 다른) 만 가져 가고 싶습니다.
그 의미 그래서 사이 1 의 선두로부터 ":"
와 1 의 선두로부터 ","
==> 나는이 작업을 수행하는 방법을 모른다 ...
도와 주셔서 감사합니다 :)
한 가지 방법은 둘러보기 를 지원하는 Perl 호환 정규식을 사용하는 것입니다 .
$ grep -oP '(?<="name":").+?(?=",)' file
Subdivision01
Department28
Division07
는 -P
PCRE 지원을 가능하게하고,이 -o
지시 grep
만 라인의 정합 부를 인쇄.
는 (?<=foo)bar
A는 긍정적 인 lookbehind : 그것은 일치 bar
가 바로 앞에 경우에만 foo
. 그런 다음 bar(?=foo)
긍정적 인 예견bar
이며 바로 뒤에 오는 경우에만 일치 합니다 foo
. 따라서 우리가 사용하는 정규식 .+?
은 a "name":"
와 a 사이에있는 가장 짧은 문자열 ( )을 찾는 것입니다 ",
.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다