![대용량 텍스트 파일을 정리하고 구분 기호를 기준으로 새 줄로 분할하여 처리합니다.](https://linux55.com/image/222880/%EB%8C%80%EC%9A%A9%EB%9F%89%20%ED%85%8D%EC%8A%A4%ED%8A%B8%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EC%A0%95%EB%A6%AC%ED%95%98%EA%B3%A0%20%EA%B5%AC%EB%B6%84%20%EA%B8%B0%ED%98%B8%EB%A5%BC%20%EA%B8%B0%EC%A4%80%EC%9C%BC%EB%A1%9C%20%EC%83%88%20%EC%A4%84%EB%A1%9C%20%EB%B6%84%ED%95%A0%ED%95%98%EC%97%AC%20%EC%B2%98%EB%A6%AC%ED%95%A9%EB%8B%88%EB%8B%A4..png)
다음과 같이 여러 디렉터리에 같은 이름을 가진 텍스트 파일이 많이 있습니다.
"[['master', 'planning', 'occur', 'many', 'scale'], ['age', 'smart', 'city', 'municipal']]"
"["가 새 줄에 나타날 때마다 "]가 나타날 때까지 각 줄을 분할해야 합니다.
"[['master', 'planning', 'occur', 'many', 'scale']
['age', 'smart', 'city', 'municipal']]"
이제 모든 특수 문자를 제거하여 일부 데이터 정리를 수행하고 싶습니다.
sed s/"'"/""/g m.txt > m1.txt
sed s/'"'/''/g m1.txt > m2.txt
sed s/\]//g m2.txt > m3.txt
sed 's/\[//g' m3.txt > m4.txt
sed s/,//g m4.txt > m5.txt
sed s/\`//g m5.txt > m6.txt
sed 's/\.//g' m6.txt > m7.txt
결과는 다음과 같습니다.
master planning occur many scale age smart city municipal
내가 실제로 원하는 결과는 다음과 같습니다.
master planning occur many scale
age smart city municipal
내 현재 문제는 다음과 같습니다.
- 모든 행에 대해 이 분할을 어떻게 수행할 수 있습니까? (행당 [...] 구조가 몇 개인지는 모르겠습니다. 그리고
- 이어지는 모든 명령을 깔끔하고 작은 스크립트로 어떻게 요약할 수 있나요?
sed -e s/"'"/""/g -e s/'"'/''/g -e s/\]//g -e 's/\[//g' -e s/,//g -e s/\`//g -e 's/\.//g' m.txt > m_1.txt
2명이 이용하기에 적합합니다! !
답변1
이것은 Perl 배열의 배열을 나타내는 Perl 문자열처럼 보입니다. 그렇다면 다음과 같이 할 수 있습니다.
$ perl -l -0777 -ne '
eval "\$string = $_";
eval "\$list = $string";
print join " ", @{$_} for @$list' your-file
master planning occur many scale
age smart city municipal
그렇지 않은 경우 ], [
'를 개행 문자로 변경하고 모든 []'`",
문자를 제거하는 경우:
$ sed 's/\], \[/\
/g; s/[]["'\''`,]//g' your-file
master planning occur many scale
age smart city municipal
답변2
사용sed
$ sed -E ":a;s/(\[[^]]*\]+),? /\1\n/;s/[]'\",[]//;ta" input_file
master planning occur many scale
age smart city municipal