我有以下sed命令将括号括在第一个单词周围 - (你好) - 我想如果我想改变这个以将括号括在第二个单词周围,我只需将(\ 1)更改为( \ 2)因为我认为这会拾取第二个单词但它不起作用 - 那么引用第二个单词的正确方法是什么?
echo "hello world" | sed -re 's/(^\w*)/(\1)/'
答案 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)/'