Sed - 如何在第二个单词周围加上括号

时间:2011-12-07 11:25:22

标签: bash sed

我有以下sed命令将括号括在第一个单词周围 - (你好) - 我想如果我想改变这个以将括号括在第二个单词周围,我只需将(\ 1)更改为( \ 2)因为我认为这会拾取第二个单词但它不起作用 - 那么引用第二个单词的正确方法是什么?

 echo "hello world" | sed -re 's/(^\w*)/(\1)/'

3 个答案:

答案 0 :(得分:2)

你在找这个:

echo "hello world" | sed 's/\(.*\) \(.*\)/\2/'

世界

echo "hello world" | sed 's/\(.*\) \(.*\)/\1/'

您好

交换词语:

echo "hello world" | sed 's/\(.*\) \(.*\)/\2 \1/'

世界你好

...并插入括号:

echo "hello world" | sed 's/\(.*\) \(.*\)/\1 [\2]/'

你好[世界]

工作原理:   。*。*匹配两个单词“hello world”

接下来,通过反斜杠括号表示感兴趣的区域。

这是一个很好的教程: http://www.ibm.com/developerworks/linux/library/l-sed2/index.html

答案 1 :(得分:1)

这可能对您有用:

echo "hello world" | sed -re 's/\w+/(&)/g'

echo "hello world" | sed -re 's/(^\w*)(\s*)(\w*)/(\1)\2(\3)/'

仅包括第二个单词:

echo "hello world" | sed -re 's/\w*/(&)/2'

将第二个单词括起来:

echo "hello brave new world" | sed -re 's/\w*/(&)/2g'

答案 2 :(得分:1)

\ 2不是指第二个单词,而是指第二个括号中的表达式。因此,将这两个词括起来应该有效:

echo hello world | sed -r 's/(\w+) (\w+)/\1 (\2)/'