【问题标题】:How to put text in quotes? (Get the value of the Set-Cookie header in quotes)如何将文本放在引号中? (获取引号中的 Set-Cookie 标头的值)
【发布时间】:2021-12-19 15:17:20
【问题描述】:

我有以下命令,它为我提供了 Set-Cookie 标头的值:

curl --head http://www.stackoverflow.com | sed -n "/^Set-Cookie:/p" | cut -c 13-

输出:

prov=abed7528-7639-e2e3-39a0-361a6d3f7925;域=.stackoverflow.com;过期=格林威治标准时间 2055 年 1 月 1 日星期五 00:00:00;路径=/; HttpOnly

我需要这个输出用引号,像这样:

“prov=abed7528-7639-e2e3-39a0-361a6d3f7925; domain=.stackoverflow.com; expires=Fri, 01-Jan-2055 00:00:00 GMT; path=/; HttpOnly”

【问题讨论】:

标签: bash curl awk sed


【解决方案1】:

如果您的输入是单行,则将其输入sed 's/\(.*\)/"\1"/' 应该可以解决问题。

如果您的文本跨越多行,则不会这样做,但以下方法会起作用:

… | { printf \"; cat; echo \"; }

...但是,这将保留所有换行符,这也可能是不可取的。要取消最后一个换行符,请改用以下内容:

… | { printf \"; sed '$s/$/"/'; }

或者,作为单个sed 命令:

… | sed '1s/^/"/; $s/$/"/'

【讨论】:

  • 它将最后的引号添加到新行,是否可以将其添加到最后一行?
  • printfecho -n 更便携。
  • @Rauf 答案的第二部分已经解决了,不是吗?
  • @Barmar 哦,我不知道(或者更可能是忘记了)-n 标志不可移植。 POSIX 从未停止过惊喜。我会改的。
  • 对不起,这是我在这里的第一个问题,我编辑了它。我希望现在这是正确的。
【解决方案2】:

使用 printf

printf '"%s"\n' "$(curl ...)"

命令替换会删除任何尾随的换行符,因此结束引号将在同一行。

但是,有一个尾随回车(网络流量通常使用\r\n 行结尾)。将此添加到管道的末尾

| tr -d '\r'
# or
| sed 's/\r$//'

将管道折叠成一个 sed 命令:

curl -s --head http://www.stackoverflow.com | sed -En '/^Set-Cookie:/ {
    s/^.{12}/"/
    s/\r$/"/
    p
    q
}'

【讨论】:

  • 好的,但是它添加了两次双引号 ""我只需要一个")
  • 为我工作。准确地展示你在做什么。
  • 太好了,后者按我需要的方式工作
  • 显示您为生成该输出而运行的代码。
猜你喜欢
  • 2012-01-27
  • 1970-01-01
  • 2022-01-07
  • 2015-12-29
  • 2018-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多