나는 이 파일을 가지고 있습니다 :
'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
이는 csvformat
with를 사용하여 -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