【问题标题】:How to keep the double quotes in double quotes using sed如何使用sed将双引号保留在双引号中
【发布时间】:2021-09-28 02:04:09
【问题描述】:

例如,

echo "hello, mon saids "I am tired", Sorry"

结果是:

hello, mon saids I am tired, Sorry

预期结果:

hello, mon saids "I am tired", Sorry

我知道我们可以使用

echo "hello, mon saids \"I am tired\", Sorry"

但我想在一个文件或多个文件中执行此操作,不能手动将 \ 插入每个“。您能提供一种使用 sed 执行此操作的方法吗?

【问题讨论】:

  • 使用单引号。
  • 我不建议尝试自动执行此操作。正确识别要转义的嵌套引号的正则表达式即使不是不可能,也很难正确编写。
  • 你能发布一个示例文件吗?您的意思是该文件是包含echo 命令的bash 脚本吗?还是文件只有一堆字符串?
  • 顺便说一句,检查问题上的标签,您使用的是powershell(即windows)还是linux shell?
  • 文件有一堆字符串,里面没有回显。当我们将文件插入我们的数据库时,我们使用“”作为分隔符,如果一个字符串包含“,它将被识别为分隔符,我们希望避免这种情况。例如,“你好,mon说“我累了”,对不起”应该在一栏中,但现在,它只有你好,我在一栏中说。

标签: linux powershell shell sed


【解决方案1】:

您可以在字符串周围使用单引号,如下所示:

echo 'hello, mon saids "I am tired", Sorry'

这样,内部双引号将被保留,而无需使用反斜杠对其进行转义。

【讨论】:

  • 嗨 Megadöden,感谢您的回复,我不能把它放在单引号中,这只是我文件中的一行,我有多行(超过 100 万行),所以我不能手动执行此操作.
  • 一开始你是如何创建一百万条虚线的?修复生成它们的东西并重新创建文件,而不是在事后尝试修补它们。
  • 这些行不是我创建的,是源团队创建的。
【解决方案2】:

我知道按照建议使用单引号可能会起作用,因此使用此 sed 可能会有所帮助

sed -E "s/(^.)|(.$)/'/g"

这有助于将第一个和最后一个双引号转换为单引号。

【讨论】:

    猜你喜欢
    • 2017-08-12
    • 1970-01-01
    • 1970-01-01
    • 2014-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    • 1970-01-01
    相关资源
    最近更新 更多