2011-12-07 39 views
0

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

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

回答

1

\ 2不引用第二个单词,而是引用第二个括号内的表达式。因此,包围这两个词应该工作:

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

这可能会为你工作:

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

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

为了支架只是第2个字:

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

要开始括号的第2个字:

echo "hello brave new world" | sed -re 's/\w*/(&)/2g' 
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