我正试着用一个新行替换双引号之外的所有逗号。
echo 'this "ok,hi",hello,how' | sed "s/,/\n/g"
上面的命令在一个新行中生成所有值。但是,我希望sed命令给予如下结果
this ok,hi hello how
因为ok,hi是用双引号括起来的,所以我希望它们在一行中出现。
ocebsuys1#
使用sed
sed
$ echo 'this "ok,hi",hello,how' | sed -E 's/("([^"]*)")?,/\2\n/g' this ok,hi hello how
uinbv5nw2#
就像这样:
echo '"ok,hi","hello","how"' | sed -E 's/"([^"]+)",?/\1\n/g' ok,hi hello how
使用awk和新字符串/要求:
awk
$ echo 'this "ok, hi",hello,how' | awk -F'",' 'BEGIN{ORS=OFS="\n"} {sub(/,/, "\n", $2); print $1"\042", $2}' this "ok, hi" hello how
kmpatx3s3#
如果可以使用gnu-awk,则:
gnu-awk
s='this "ok,hi",hello,how' awk '{print gensub(/("([^"]*)")?,/, "\\2\n", "g")}' <<< "$s" this ok,hi hello how
使用FPAT的另一个gnu-awk:
FPAT
awk -v FPAT='([^",]*"[^"]*")?[^",]*(,|$)' '{ for (i=1; i<=NF; ++i) { gsub(/"|,$/, "", $i) print $i } }' <<< "$s" this ok,hi hello how
3条答案
按热度按时间ocebsuys1#
使用
sed
uinbv5nw2#
就像这样:
使用
awk
和新字符串/要求:kmpatx3s3#
如果可以使用
gnu-awk
,则:使用
FPAT
的另一个gnu-awk
: