引用符内にある場合にのみ、スペースを下線で置き換えます。

引用符内にある場合にのみ、スペースを下線で置き換えます。

引用符内のすべてのスペースを置き換える必要があります。複数の列がありますが、使用時に私の列を削除するスペースを含む出力を参照する列は1つだけです。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

1行のファンの場合:

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

答え4

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

警告:二重引用符ペアの間にスペースが1つしかない場合にのみ機能します。

関連情報