【问题标题】:How to enclose every line in a file in double quotes with sed?如何用sed将文件中的每一行用双引号括起来?
【发布时间】:2011-09-27 02:22:24
【问题描述】:

这是我尝试过的:sed -i 's/^.*/"$&"/' myFile.txt

它在每行的开头放一个 $。

【问题讨论】:

  • 你试过去掉 & 号吗?
  • 对不起,我的意思是说它在每行的开头放了一个 $。已编辑。没有&符号,它什么也不做
  • 在这里都可以正常工作。我不知道你使用的是哪种 sed
  • & 不需要$,你只是得到一个文字$。根据您的 cmets,我认为您遇到了 shell 引用问题,而不是 sed 问题。
  • 这有效:'s/^.*$/\"&\"/'。我不得不转义双引号(但使用 sed 的转义字符,而不是 powershell 的)。我正在使用来自 GnuWin32 的 sed。使用其他版本的 sed 是否不需要这样做?

标签: regex windows sed


【解决方案1】:

在这里

sed 's/\(.*\)/"\1"/g'

【讨论】:

  • 嗯,这个好像一点效果都没有。
  • 我是否需要在 powershell 中转义双引号之类的?
  • 在 OS X Yosemite 上运行良好。
  • 对于 unix/linux 初学者,您可能想要执行类似cat filename.txt | sed 's/\(.*\)/"\1"/g' 的操作来将您的输入输入到 sed。
  • cat file | <thing>cat 的经典错误用法。使用文件重定向将文件传递到标准输入:sed 's/\(.*\)/"\1"/g' < filename.txt.
【解决方案2】:

更短

sed 's/.*/"&"/'

没有空格

sed 's/ *\(.*\) *$/"\1"/'

跳过空行

sed '/^ *$/d;s/.*/"&"/'

【讨论】:

    【解决方案3】:

    你几乎猜对了。试试这个稍微修改过的版本:

    sed 's/^.*$/"&"/g' file.txt
    

    【讨论】:

      【解决方案4】:

      你也可以在没有捕获组的情况下这样做:

      sed 's/^\|$/"/g'
      

      '^' 匹配行首,'$' 匹配行尾。

      | 是一个“交替”,它的意思是“或”。这里需要转义[1],所以英文^\|$的意思是“行首或行尾”。

      “替换”这些字符很好,它只是将文本附加到末尾的开头,因此我们可以替换",并在末尾添加g 以进行全局搜索以同时匹配两者。

      [1] 不幸的是,事实证明 |不是 POSIX“基本正则表达式”的一部分,而是可以使用 REG_ENHANCED 标志编译的“增强”功能的一部分,但在 OSX 上不是默认设置,因此使用适当的基本捕获组(如 @987654326)会更安全@

      今天给我一个谦虚的馅饼。

      【讨论】:

      • 如果你了解 sed 的魔力,你能解释一下这实际上是做什么的吗?
      • 我已经尝试了上面列出的所有答案,但没有什么对我有用,但这个技巧可以!谢谢。
      猜你喜欢
      • 2015-11-14
      • 1970-01-01
      • 2014-02-20
      • 2011-02-14
      • 2019-09-11
      • 1970-01-01
      • 2015-01-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多