두 문자열 사이의 grep/sed

두 문자열 사이의 grep/sed

지금 이 코드가 있어요

cat -n rfile | sed -n '/"semantic_url":"/,/","/p'

여기서 rfile은 많은 양의 텍스트를 포함하는 파일입니다. 나는 각각 사이의 모든 것을 추출하려고 노력하고 있습니다

"semantic_url":"

(큰따옴표와 마지막 큰따옴표를 포함하세요.)

다음 패턴은 이렇습니다.

","

내가 뭘 잘못하고 있는지 잘 모르겠습니다. 나는 오랫동안 맨페이지를 읽고 Google 검색을 하면서 이 작업을 해왔습니다. 내가 뭘 잘못했나요?

단지 이러한 패턴 사이에 무엇이 있는지 반환하도록 허용하지 않습니다. 그것은 나에게 모든 것을 돌려주었습니다.

예시를 입력하세요.

"semantic_url":"number1","thisorthat"semantic_url":"number2","somecode"semantic_url":"number3","somemorecode

출력 예

 number1, number2, number3

답변1

sed -netP -e's/"semantic_url":"\([^"]*\)","/\n\1\n/;D' \
    -e:P  -e'P;D' <in >out

...문제에 대한 귀하의 설명을 이해한다면 여는 따옴표와 닫는 따옴표가 같은 줄에 있고 및 사이의 비트가 이중을 포함 "semantic_url":"하지 않는 한 ","구분된 문자열은 각 출력 줄뿐만 아니라 인쇄됩니다. 따옴표 한 쌍에서 발견된 각 쌍 사이의 모든 것.

출력 라인을 연결하려면 이에 대한 내용을 작성할 수 있지만 다른 것을 추가하는 것이 더 쉬울 수도 있습니다 sed.

sed -netP -e's/"semantic_url":"\([^"]*\)","/\n \1\n/;D' \
    -e:P  -e'P;//!=;D' <in|\
sed -e'/^[^ ].*/!{H;d;}'   \
    -e's///;x;s/\n.//;s//,/g'

위의 입력을 다음과 같이 파이프했습니다.

"semantic_url":"number1","thisorthat"semantic_url":"number2","somecode"semantic_url":"number3","somemorecode
"semantic_url":"number4","thisorthat"semantic_url":"number5","somecode"semantic_url":"number6","somemorecode
"semantic_url":"number7","thisorthat"semantic_url":"number8","somecode"semantic_url":"number9","somemorecode

다음과 같이 인쇄되었습니다.

number1,number2,number3
number4,number5,number6
number7,number8,number9

관련 정보