unix SED -将双引号外的每个逗号替换为换行符(Bash)

ftf50wuq  于 2022-12-23  发布在  Unix
关注(0)|答案(3)|浏览(175)

我正试着用一个新行替换双引号之外的所有逗号。

echo 'this "ok,hi",hello,how' | sed "s/,/\n/g"

上面的命令在一个新行中生成所有值。但是,我希望sed命令给予如下结果

this ok,hi
hello
how

因为ok,hi是用双引号括起来的,所以我希望它们在一行中出现。

ocebsuys

ocebsuys1#

使用sed

$ echo 'this "ok,hi",hello,how' | sed -E 's/("([^"]*)")?,/\2\n/g'
this ok,hi
hello
how
uinbv5nw

uinbv5nw2#

就像这样:

echo '"ok,hi","hello","how"' | sed -E 's/"([^"]+)",?/\1\n/g'
ok,hi
hello
how

使用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
kmpatx3s

kmpatx3s3#

如果可以使用gnu-awk,则:

s='this "ok,hi",hello,how'

awk '{print gensub(/("([^"]*)")?,/, "\\2\n", "g")}' <<< "$s"

this ok,hi
hello
how

使用FPAT的另一个gnu-awk

awk -v FPAT='([^",]*"[^"]*")?[^",]*(,|$)' '{
   for (i=1; i<=NF; ++i) {
      gsub(/"|,$/, "", $i)
      print $i
   }
}' <<< "$s"

this ok,hi
hello
how

相关问题