텍스트 파일의 모든 공백을 쉼표로 바꿉니다.

텍스트 파일의 모든 공백을 쉼표로 바꿉니다.

텍스트의 모든 공백을 쉼표로 바꿔야 합니다. 현재 이 줄을 사용하고 있지만 작동하지 않습니다. 원본과 똑같은 텍스트 파일이 출력됩니다.

sed 's/[:blank:]+/,/g' orig.txt > modified.txt

감사해요

답변1

GNU 사용 sed:

sed -e 's/\s\+/,/g' orig.txt > modified.txt

또는 다음을 사용하여 perl:

perl -pne 's/\s+/,/g' < orig.txt > modified.txt

편집하다:'s/[^\S\n]+/,/g'Perl에서 개행 문자를 제외하려면 이중 부정을 사용 하거나 원하는 공백 문자만 일치시키면 됩니다 's/[ \t\r\f]+/,/g'.

답변2

사용 tr:

tr -s '[:blank:]' ',' <file

그러면 수평 공백이 쉼표로 대체됩니다. 반복되는 공백은 하나의 쉼표로만 대체됩니다.

답변3

명령에 문제가 있습니다.

sed 's/[:blank:]+/,/g' orig.txt > modified.txt

두 가지입니다:

  1. , , , , 또는 [:blank:]문자 중 하나와 일치하는 대괄호 표현식 입니다 . POSIX 문자 클래스의 문자 중 하나와 일치시키려는 경우 사용하십시오 .:abkln[:blank:][[:blank:]]

  2. +확장된 정규식 수정자 입니다 . 이 sed유틸리티는기초적인정규식이며 +리터럴 문자와 일치합니다 +. 기본 정규 표현식에서 동일한 효과를 얻으려면 를 사용 \{1,\}하거나 이 특정 표현식에서는 를 사용하십시오 [[:blank:]][[:blank:]]*.

간단히 말해서 올바른 sed표현은 다음과 같습니다.

sed 's/[[:blank:]]\{1,\}/,/g' orig.txt >modified.txt

또는

sed 's/[[:blank:]][[:blank:]]*/,/g' orig.txt >modified.txt

다른 사람들이 지적했듯이 단일 바이트 ASCII 문자가 텍스트에 사용된다고 가정하면 tr한 문자 집합을 다른 문자 집합으로 간단히 음역하는 것이기 때문에 이 경우에 사용하는 것이 더 효율적일 것입니다. 다음 두 명령 중 하나로 tr문제를 해결할 수 있습니다.

tr -s '[:blank:]' '[,*]' <orig.txt >modified.txt

이는 [,*]"이 그룹에 필요한 쉼표 수가 첫 번째 그룹의 문자 수와 일치함"을 의미합니다.

tr -s '\t ' ',,' <orig.txt >modified.txt

-s옵션을 사용 tr하면 여러 개의 연속된 쉼표가 단일 쉼표로 "압착"됩니다.

답변4

awk '{print $1","}' Servers | tr -d '[\n]' | xargs echo 

여기서 파일 이름은 Servers입니다. 다음 내용이 포함되어 있습니다..

Server1
Server2
Server3

위의 명령을 사용하면 다음과 같은 결과를 얻을 수 있습니다.

Server1,Server2,Server3,


[mohramak@oc3246038448 Desktop]$ cat Servers
Server1
Server2
Server3
[mohramak@oc3246038448 Desktop]$ awk '{print $1","}' Servers | tr -d '[\n]' | xargs echo 
Server1,Server2,Server3,
[mohramak@oc3246038448 Desktop]$ 

관련 정보