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