문자열을 추출하기 위해 awk 또는 grep 출력을 사용해야합니다. and vancouver/news/vancouver-voices예

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

"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 전문가가 특수 문자를 올바르게 탈출하는 방법에 대한 단서가 있습니까?



답변

awk '/{/ {print $2}' FS='"'

결과

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

그러나 이것은 jq를 사용하여 더 잘 수행
됩니다.


답변

솔루션 sed:

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

grep+ cut:

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

답변

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

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

수율 :

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

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