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

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

따옴표 안에 있는 모든 공백을 바꿔야 합니다. 여러 열이 있지만 사용할 때 내 열을 삭제하는 공백이 포함된 출력을 참조하는 열은 하나만 있습니다.column -t

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

"UDP_netprobe"
"ACL_allow"
"ACL_deny" 

답변1

그리고 perl:

perl -pe 's{".*?"}{$& =~ y/ /_/r}ge' file

답변2

sed와 함께

sed -E ':A;s/("[^ "]+) ([^"]*")/\1_\2/;tA' infile

답변3

일반적으로 적합한 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

답변4

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

경고: 큰따옴표 쌍 사이에 공백이 하나만 있는 경우에만 작동합니다.

관련 정보