나는 그것을 사용하고 있다
grep 'name=>' log.txt | cut -d\ -f3
나는 다음과 같은 결과를 얻습니다.
name=>"Faya-Largeau",
name=>"Paris",
name=>"Madrid",
name은 변수의 출력입니다. (저는 이와 같은 도시의 긴 목록을 가지고 있습니다)
"Faya-Largeau", "Paris" 또는 "Madrid"만 가져오고 싶으므로 이름 => 및 뒤의 괄호 사이에 있는 도시를 제외해야 합니다.
어떻게 해야 하나요?
미리 감사드립니다
답변1
이 유틸리티의 주요 목적 grep
은 특정 정규식과 일치하는 행을 추출하는 것입니다. 일부 비표준 구현은 줄에서 하위 문자열을 추출할 수도 있지만 이는 일반적으로 파일이나 텍스트 스트림에서 줄의 스크립트 편집을 수행하는 데 사용되는 grep
editors 영역을 침해합니다 .sed
기준을 사용하여 sed
먼저 하위 문자열과 큰따옴표로 묶인 문자열을 포함하지 않는 모든 줄을 제거 name=>
하고 큰따옴표로 묶인 문자열을 캡처합니다. 그런 다음 일치하는 줄을 큰따옴표로 묶은 문자열로 바꿉니다.
sed -e '/.*name=>\("[^"]*"\).*/!d' -e 's//\1/' log.txt
(원본 파일에서 직접 실행해야 합니다.)
첫 번째 표현식은 /.*name=>\("[^"]*"\).*/!d
주어진 정규 표현식과 일치하지 않는 모든 줄을 제거합니다. 또한 큰따옴표로 묶인 문자열도 캡처합니다 \1
.
두 번째 표현식은 s//\1/
이전 정규 표현식과 일치하는 줄의 비트를 나머지 줄의 캡처된 큰따옴표 문자열로 바꿉니다.
답변2
다음을 시도해 볼 수 있습니다.
$ grep 'name=>' log.txt | cut -d'"' -f2
|
의 출력을 grep
의 입력 으로 파이프합니다 cut
.
cut -d'"' -f2
문자로 구분된 필드의 각 입력 줄을 잘라내고 "
두 번째 필드를 추출합니다.
"
도시 이름 주위에 문자를 유지 하려면 아마도 작동하지 않을 것입니다.
답변3
및 awk
대신 사용하십시오 . 예를 들어:grep
cut
awk -F'"' '/name=>/ {print $2}'
답변4
이에 관한 한, 큰따옴표 사이에 있는 내용을 캡처한 것뿐입니다.
입력하다
$ cat file
name=>"Brie Comte Robert",
name=>"Montcuq",
name=>"Faya-Largeau",
name=>"Paris",
name=>"Madrid",
을 텐데grep
$ grep -oE '"[^"]+"' file
$ grep -o '"[^"]\+"' file
사용 GNU
awk
:
$ awk 'BEGIN{FPAT="\042([^\"]+)\042"} {print $1}' file
산출
"Brie Comte Robert"
"Montcuq"
"Faya-Largeau"
"Paris"
"Madrid"