some name;another thing; random; value value value value value
sed를 사용한 후 나타나는 공백을 바꾸려고 합니다 random;
. some name
예를 들어, 그 안에 공간을 보존하는 것이 중요합니다.
그러면 모든 공백이 쉼표로 대체됩니다. *;*;*;
sed와 같은 표현식을 나머지 줄에 사용하고 공백을 쉼표로 바꾸려면 어떻게 해야 합니까 ?
sed -e 's/ /,/g'
감사해요
답변1
마지막으로 구분된 필드에 in을 사용하세요 gsub()
.awk
;
$ awk -F ';' 'BEGIN { OFS=FS } { gsub(" ", ",", $NF); print }' file
some name;another thing; random;,value,value,value,value,value
마지막 공백 이후의 모든 공백을 쉼표로 바꾸고 sed
싶다고 가정하고 사용 하십시오.;
$ sed 'h;s/.*;//;y/ /,/;x;s/;[^;]*$//;G;s/\n/;/' file
some name;another thing; random;,value,value,value,value,value
주석이 달린 sed
스크립트:
h ; # Duplicate line into hold space
s/.*;// ; # Delete up to the last ;
y/ /,/ ; # Change space to comma in remaining data
x ; # Swap pattern and hold spaces
s/;[^;]*$// ; # Delete from the last ;
G ; # Append hold space delimited by newline
s/\n/;/ ; # Replace the embedded newline with ;
; # (implicit print)
"홀드 공간"은 별도로 제공되는 저장 버퍼입니다 sed
. "패턴 공간"은 입력에서 데이터를 읽고 수정 사항을 적용할 수 있는 버퍼입니다.
답변2
Perl이 구출하러 옵니다!
perl -F';' -ne '$F[3] =~ s/ /,/g; print join ";", @F'
-n
입력을 한 줄씩 읽고 각 줄을 처리합니다.-F
주어진 정규식의 각 줄을 @F 배열로 분할합니다.=~
"random" 다음 요소 뒤의 @F 배열의 네 번째 요소에만 교체를 바인드합니다.- 가입하다@F 배열의 요소를 다시 출력 문자열에 연결합니다.
답변3
그리고GNU sed
$ s='some name;another thing; random; value value value value value'
$ echo "$s" | sed -E ':a s/^(.*random;.*) /\1,/; ta'
some name;another thing; random;,value,value,value,value,value
:a
상표a
s/^(.*random;.*) /\1,/
그러면 뒤에 공백이 생길 때까지 필요한 수의 문자로(.*random;.*)
입력random;
줄의 모든 내용이 캡처된 다음 교체 부분의 역참조를 사용하여 캡처된 문자열을 유지하고 공백을 쉼표 문자로 변경합니다.- input 에 둘 이상이 있으면
random;
공백은 처음 나타날 때까지만 유지됩니다.
- input 에 둘 이상이 있으면
ta
a
이전 교체가 성공한 경우 레이블을 지정하는 분기
답변4
$ perl -MText::CSV_XS=csv -e'csv(in=>csv(in=>"file",sep=>";",allow_whitespace=>1),sep=>";",quote_space=>0);'
some name;another thing;random;value value value value value