如何使用sed脚本在单引号中包装单词?

时间:2014-03-15 00:51:47

标签: bash shell sed

我很好奇如何用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'

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分: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'