我试图使用sed切换句子中第一个和最后一个单词的顺序,因为我不认为我理解在这种情况下"贪婪"的正则表达式是多少.我只是因为三个字的句子而悲惨地失败了.
$ echo hello world mike | sed 's/\([a-z]*\).* \([a-z]*\).*/\2 \1/'
mike hello
为什么输出不是"世界你好迈克"?一些可能有用的额外信息.
我的最终目标是切换句子中第一个和最后一个单词的顺序,而不管其中有多少单词.
您没有将该hello部件作为捕获组之一包含在内,因此无法获得输出.尝试:
$ sed -E 's/([a-z]+) (.+) ([a-z]+)/\3 \2 \1/' <<< "hello world mike"
mike world hello
$ sed -E 's/([a-z]+) (.+) ([a-z]+)/\3 \2 \1/' <<< "hello world foo bar baz mike"
mike world foo bar baz hello
(注意:我也删除了你无用的回声.)
您也可以替换[a-z]with [[:alpha:]]来处理大写字母:
$ sed -E 's/([[:alpha:]]+) (.+) ([[:alpha:]]+)/\3 \2 \1/' <<< "Hello world Mike"
Mike world Hello