파일에서 특정 텍스트의 내용을 가져오는 방법

파일에서 특정 텍스트의 내용을 가져오는 방법

다음 내용이 포함된 데모.txt라는 파일이 있습니다.

value -= [
 "02|05|06|abc",
]

/* Some other content other than value variable */

value -= [
]

value -= [
 "0698|06|07|abc",
]

이 데모.txt 파일에는 많은 값 변수가 있습니다.

Demo.txt 파일을 읽은 후 아래와 같이 고유한 값만 인쇄하고 싶습니다.

02| 05| 06| 0698| 07| abc

나는 다음을 시도했다:

awk '$0 == "value -= [" {i=1;next};i && i++ <= 1'

이것은 나에게 준다

"02|05|06|abc",
]
"0698|06|07|abc",

그러나 나는 "]"를 원하지 않으며 중복된 내용도 원하지 않습니다. 이 경우 "06"과 "abc"

누구든지 조언을 해줄 수 있나요?

답변1

$ grep -oE '".*"' demo.txt | grep -oE '\w+' | sort -u
02
05
06
0698
07
abc
  • -o일치하는 줄 중 일치하는(비어 있지 않은) 부분만 인쇄합니다. 각 부분은 별도의 출력 줄에 인쇄됩니다.
  • -EPATTERN을 확장 정규식으로 해석
  • ".*"따옴표 안의 모든 값을 가져옵니다.
  • \w+1개 이상의 영숫자/밑줄 문자
  • sort -u고유한 가치 얻기

답변2

다음은 다음을 사용하는 솔루션입니다.awk -v RS='' -F='"' -f script input_file

/value -= \[/ {
    split($0, data);
    count = split(data[2], values, "|");
    for (i = 1; i <= count; i++) {
        result[values[i]] = values[i];
    }
}

END {
    for (r in result) {
        printf r "|";
    }
    print "";
}

이 작업은 다음을 통해 수행할 수도 있습니다 sed.

sed -nr '/"/{s/[ "]//g;s/,/|/;G;s/\n//;x};${x; :a; s/([^|]+\|)(.*)\1/\2/; ta; p}' input

관련 정보