따옴표 안에있을 때만 공백을 밑줄로 바꿉니다.


1

따옴표 안에있는 모든 공백을 바꿔야합니다. 나는 여러 개의 열을 가지고 있지만 하나의 열만 공백을 포함하는 출력을 인용하여 사용할 때 열을 버리고 있습니다.column -t

"UDP netprobe"
"ACL allow"
"ACL deny"

"UDP_netprobe"
"ACL_allow"
"ACL_deny" 

열은 어떤 문자로 구분됩니까? 기본적 column으로 공백은 입력 파일의 구분 기호로 사용되며 -s 'delimiter', 구분 기호 는 문자 집합으로 변경할 수 있습니다 .
αғsнιη

답변:


1

일반적으로 적절한 CSV 파서가 권장됩니다. 이 간단한 경우 awk는 필드 구분 문자로 큰 따옴표를 사용하고 다음을 수행합니다.

awk -F '"' -v OFS='"' '{
    for (i=2; i<=NF; i+=2)
        gsub(/[[:blank:]]/, "_", $i)
    print
}' <<END
first "UDP netprobe" hello
second "ACL allow" friendly "oops, another quoted field"
third "ACL deny" world
END
first "UDP_netprobe" hello
second "ACL_allow" friendly "oops,_another_quoted_field"
third "ACL_deny" world

원 라이너 팬의 경우 :

awk -F\" '{for(i=2;i<=NF;i+=2)gsub(/[[:blank:]]/,"_",$i)}1' OFS=\" file

| awk -F ' "' '{for (i = 2; i <= NF; i ++) if (i % 2 == 0) gsub (" ","_ ", $ i);} 1'OFS =" " 감사합니다 !!
Steve

물론 두 번째 필드마다 원하는 경우 추가 테스트가 필요하지 않습니다.
glenn jackman 12



1

사용 sed:

sed 's/\("[^"]\+\) \([^"]\+"\)/\1_\2/g' file

정규식은 이중으로 단어를 찾고 명령은 공백을 밑줄로 바꿉니다.


나를 위해 일하지 않았다.
unxnut

1
sed 's/\(\"[^" ]*\) \([^"]*\"\)/\1_\2/g' file

주의 사항 : 한 쌍의 큰 따옴표 사이의 단일 공백으로 만 작동합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.