【问题标题】:How to wrap words in single quotes using sed script?如何使用 sed 脚本将单词用单引号括起来?
【发布时间】:2014-03-15 09:16:29
【问题描述】:

我很好奇如何使用 sed 执行以下操作:我需要在每行中将某些两个单词用单引号括起来。例如以下文本:

我是这样做的:

cat file |sed "s/[^ ][^ ]*/'&'/g"

结果:

'the-first-word' '-firstPrameter' 'value' '-secondParameter' 'value' '-thirdParameter' 'value' '-fourthParameter' 'value'

但它包含了每个单词。

应该是这样,跳过第一个单词,只换行参数和值:

the-first-word '-firstPrameter value' '-secondParameter value' '-thirdParameter value' '-fourthParameter value'

【问题讨论】:

  • 所有参数标签都以-开头吗?
  • cat file |sed 是对 Cat 的无用使用。相反,只需将文件名作为最后一个参数提供给 sed。你能解释一下为什么你需要这样做吗?也许有一个完全不同的解决方案。
  • 现在它包装了“-”。 'the'-'first-word' '-'firstParameter' 'value' '-'secondParameter' 'value' '-'thirdParameter' 'value' '-'fourthParameter' 'value'

标签: bash shell sed


【解决方案1】:
sed "s/ \([^ ]* [^ ]*\)/ '\\1'/g" file



$cat file.txt
the-first-word -firstPrameter value -secondParameter value -thirdParameter value -fourthParameter value

$sed "s/ \([^ ]* [^ ]*\)/ '\\1'/g" file.txt
the-first-word '-firstPrameter value' '-secondParameter value' '-thirdParameter value' '-fourthParameter value'

【讨论】:

    【解决方案2】:

    在您的示例中,第一个单词位于行首。因此,如果我们引用所有前面有空格的单词,那么我们将引用除第一个以外的所有单词:

    sed "s/ \([^ ]\+\)/ '\\1'/g" file
    the-first-word '-firstPrameter' 'value' '-secondParameter' 'value' '-thirdParameter' 'value' '-fourthParameter' 'value'
    

    如果您的 sed 支持 -r 标志 (GNU),那么我们可以删除其中一些反斜杠:

    sed -r "s/ ([^ ]+)/ '\\1'/g" file
    

    在 Mac OSX 上,将 -r 替换为 -E

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-29
      • 2021-11-29
      • 1970-01-01
      • 2020-03-08
      • 2014-08-07
      • 1970-01-01
      相关资源
      最近更新 更多