【问题标题】:Adding double quotes to multiline variable in pipe in Bash在 Bash 的管道中为多行变量添加双引号
【发布时间】:2017-12-14 15:19:18
【问题描述】:

我在一个变量中有一个多行变量,比如

This is
a variable

它通过多个管道命令,在某些时候,我想给它加上双引号,所以它变成了

"This is
a variable"

我尝试使用awkprint 来做到这一点,因为我在网上和这里找到了一些答案,但它要么什么都不打印,要么打印变量的名称,要么只打印"This。这是我得到的:

    echo $list_comments \
    | awk -v k="text" '{n=split($0,a,","); for (l=1; l<=n; l++) print a[l]}' \
    | awk '/'$FILTER_COMMENT'/ {print $0}' \
    | cut -d ":" -f2 \
    | sed -e 's/[\"]/''/g' \
    | tr "\n" "\r" \
    | awk '{echo "\"$1\""}' \
    | tr -d "\n" >> app_comments.txt

如果它是相关的,我正在尝试创建一个 CSV 文件,所以我需要双引号之间的这个多行变量来保持这种状态。如果有什么要补充的,请告诉我。

【问题讨论】:

  • "如果相关,我正在尝试创建一个 CSV 文件," ... 是的,非常相关!最好包含 2 行示例数据,1 行需要多行字段,1 行不需要,然后显示您需要如何转换它。此外,您通过管道传输的所有 cmd 都可以作为 1 awk 脚​​本执行,但其中有很多疯狂的东西,awk '{echo ...}'???。最后,您是否故意省略了 "$list_comments" 周围的 dbl-quotes?祝你好运。
  • @shellter 我没有像你说的那样尝试留下双引号,我会试试的! awk '{echo ...}' 是我将双引号添加到值的许多不成功尝试之一。其他一切都只是处理从 API 获取的 JSON 字符串。

标签: bash pipe pipeline


【解决方案1】:

这是你的预期吗?

$ a=$(echo -e "hello\nword"); echo "${a}"
hello
word

$ a=$(echo -e "hello\nword"); echo \""${a}"\"
"hello
word"

【讨论】:

  • 没用,抱歉。当我在awk '{echo ... }' 中尝试您的方式时,它不会打印任何内容@
  • @Keker mm 我不确定我是否清楚地理解了您的要求.. 这个怎么样? a="123"; awk -v var="$a" 'BEGIN{print "\""var"\""}'
  • 对不起,我不能那样做,因为我在管道中......因为管道,我不能在 var=... 中放入任何东西。或者我不知道该怎么做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-19
  • 2012-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多