문자열을 추출하기 위해 awk 또는 grep 출력을 사용해야합니다.


3

다음과 같은 출력이 있습니다.

"vancouver/news/vancouver-voices": {
    "status": 0,
    "time": 0,
    "timestamp": 1371298701
},
"vancouver/news/vancouvers-march-second-annual-success": {
    "status": 0,
    "time": 0,
    "timestamp": 1371298701
}

부분 URL 만 추출해야합니다 ( vancouver/news/vancouvers-march-second-annual-success and vancouver/news/vancouver-voices예 :

나는 기본적으로 bash를 통해 명령을 호출 한 다음 grep awk 또는 sed로 파이프합니다.

grep ( | grep -o '".*": {')을 사용 하면 가까이 갈 수 있습니다. 나는 다음과 같은 출력으로 끝납니다.

"vancouver/news/vancouver-voices": {
"vancouver/news/vancouvers-march-second-annual-success": {

그래도 sed 또는 awk를 사용해야한다고 생각합니다. 몇 가지를 시도했지만 특수 문자를 피해야한다고 생각합니다. 예를 들어 | awk '\"(.*)\": {' --output='$1'를 시도 했지만 백 슬래시 때문에 barfs입니다.

sed 또는 awk 전문가가 특수 문자를 올바르게 탈출하는 방법에 대한 단서가 있습니까?


이 작업을 수행하는 데 더 우아한 방법이 있다고 생각해야하지만 이것은 트릭을 수행하는 것 같습니다. | grep -o ' ". *": {'| sed 's / (^ "\ |": {$) // g'. 더 좋은 제안이 있으면 알려주세요.
Brad

답변:



1

솔루션 sed:

sed -n '/{/s="\([^"]*\)".*=\1=p'

grep+ cut:

grep '{' | cut -d'"' -f2

0

여전히 grep을 사용할 수 있습니다 :

| grep -o '[^"/]\+\(/[^"/]\+\)\+'

수율 :

vancouver/news/vancouver-voices
vancouver/news/vancouvers-march-second-annual-success

비- ", 비 // 문자의 초기 문자열을 찾은 다음 슬래시와 이니셜과 동일한 유형의 문자열로 구성된 하나 이상의 시퀀스를 검색합니다. 또한 영숫자 + 대시 문자 클래스를 사용하여 URL 구성 요소를 선택하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.