仅当引号内时才用下划线替换空格

仅当引号内时才用下划线替换空格

我需要替换引号内存在的所有空格。我有几列,但只有一列引用了包含空格的输出,在使用时会丢弃我的列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

警告:它仅适用于一对双引号之间的单个空格。

相关内容