작은따옴표로 묶이고 쉼표로 구분된 단어가 포함된 행을 열로 변환

작은따옴표로 묶이고 쉼표로 구분된 단어가 포함된 행을 열로 변환

나는 이 파일을 가지고 있습니다 :
'dog', 'cat', 'horse', 'turtle'

이 줄을 다음으로 변환하고 싶습니다.

dog
cat
horse
turtle

쉼표를 구분 기호로 사용하고 tr 명령을 사용하면 다음과 같이 할 수 있습니다.
tr -s ',' '\n' < file

출력 포함

'dog'
 'cat'
 'horse'
 'turtle'

하지만 구분 기호로 사용하면 작동하지 않습니다 ', '.

tr -s '\', \'' '\n' < file

작은따옴표를 이스케이프 처리하기 위해 이중 백슬래시를 사용하더라도 여전히 작동하지 않습니다. 터미널에서 얻는 유일한 출력은 >.

원하는 출력을 얻기 위해 작은 따옴표를 올바르게 이스케이프 처리하는 방법은 무엇입니까?

답변1

입력을 인용된 CSV로 처리하고, 각 쉼표 구분 기호 뒤에 건너뛸 수 있는 공백을 추가하고, 인용 문자로 표준 큰따옴표 대신 작은따옴표를 사용하여 csvformat데이터 형식을 다시 지정할 수 있습니다.

$ csvformat -S -q "'" -D $'\n' file
dog
cat
horse
turtle

이는 csvformatwith를 사용하여 -S각 구분 기호 뒤의 초기 공백 문자를 건너뛰고 -q "'"입력 따옴표 문자를 작은 따옴표로 설정한 다음 -D $'\n'출력 필드 구분 기호를 개행 문자로 설정합니다.

그러면 파일이 다시 포맷됩니다.

포함된 줄 바꿈을 사용하는 모든 필드는 포함된 큰따옴표가 포함된 필드와 마찬가지로 출력에서 ​​인용됩니다.

답변2

tr문자열이 아닌 컬렉션에 적용됩니다. 첫 번째 그룹의 각 첫 번째 기호는 두 번째 그룹의 첫 번째 기호로 대체되고, 첫 번째 그룹의 모든 두 번째 기호는 두 번째 그룹의 두 번째 기호로 대체되는 식입니다.

두 번째 그룹에 첫 번째 그룹보다 적은 수의 기호가 있는 경우 첫 번째 그룹에서 올바르게 쌍을 이루지 않은 모든 기호는 두 번째 그룹의 마지막 기호로 대체됩니다.

당신은해야합니다

tr -s "\', "  '\n' < file

각 아포스트로피, 쉼표 및 공백은 개행 문자로 대체되지만 -s 옵션은 이들을 모두 단일 LF 인스턴스로 압축합니다.

답변3

$ awk -F"'" '{for (i=2;i<=NF;i+=2) print $i}' file
dog
cat
horse
turtle

답변4

사용sed

$ sed "s/\([^,]*\), /\1\n/g;s/'//g" input_file
dog
cat
horse
turtle

관련 정보