따옴표 안에 있는 모든 공백을 바꿔야 합니다. 여러 열이 있지만 사용할 때 내 열을 삭제하는 공백이 포함된 출력을 참조하는 열은 하나만 있습니다.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
경고: 큰따옴표 쌍 사이에 공백이 하나만 있는 경우에만 작동합니다.