텍스트의 모든 공백을 쉼표로 바꿔야 합니다. 현재 이 줄을 사용하고 있지만 작동하지 않습니다. 원본과 똑같은 텍스트 파일이 출력됩니다.
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
두 가지입니다:
, , , , 또는
[:blank:]
문자 중 하나와 일치하는 대괄호 표현식 입니다 . POSIX 문자 클래스의 문자 중 하나와 일치시키려는 경우 사용하십시오 .:
a
b
k
l
n
[:blank:]
[[:blank:]]
+
확장된 정규식 수정자 입니다 . 이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]$