텍스트가 변수를 통해 생성된다는 것을 알면 Grep을 사용하여 문자 체인에서 텍스트 앞뒤의 문자를 어떻게 삭제할 수 있습니까?

텍스트가 변수를 통해 생성된다는 것을 알면 Grep을 사용하여 문자 체인에서 텍스트 앞뒤의 문자를 어떻게 삭제할 수 있습니까?

나는 그것을 사용하고 있다

grep 'name=>' log.txt | cut -d\   -f3 

나는 다음과 같은 결과를 얻습니다.

name=>"Faya-Largeau",
name=>"Paris",
name=>"Madrid",

name은 변수의 출력입니다. (저는 이와 같은 도시의 긴 목록을 가지고 있습니다)

"Faya-Largeau", "Paris" 또는 "Madrid"만 가져오고 싶으므로 이름 => 및 뒤의 괄호 사이에 있는 도시를 제외해야 합니다.

어떻게 해야 하나요?

미리 감사드립니다

답변1

이 유틸리티의 주요 목적 grep은 특정 정규식과 일치하는 행을 추출하는 것입니다. 일부 비표준 구현은 줄에서 하위 문자열을 추출할 수도 있지만 이는 일반적으로 파일이나 텍스트 스트림에서 줄의 스크립트 편집을 수행하는 데 사용되는 grepeditors 영역을 침해합니다 .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대신 사용하십시오 . 예를 들어:grepcut

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"

관련 정보