다음 내용이 포함된 데모.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
일치하는 줄 중 일치하는(비어 있지 않은) 부분만 인쇄합니다. 각 부분은 별도의 출력 줄에 인쇄됩니다.-E
PATTERN을 확장 정규식으로 해석".*"
따옴표 안의 모든 값을 가져옵니다.\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