我希望最终匹配带有或不带冗余字符串的规则。并交换匹配模式。 例:
$ "aaa bbb ccc" --> "bbb aaa"
$ "aaa bbb" --> "bbb aaa"
这是我尝试但不起作用的。
echo "aaa bbb ccc" | sed -e 's:\(.*\)\s\(.*\)(\s\(.*\))?:\2\s\1:g'
$ aaa bbb ccc
谢谢。
尝试:
$ echo "aaa bbb" | sed -Ee 's:([[:alnum:]]+)[[:space:]]+([[:alnum:]]+).*:\2 \1:'
bbb aaa
$ echo "aaa bbb ccc" | sed -Ee 's:([[:alnum:]]+)[[:space:]]+([[:alnum:]]+).*:\2 \1:'
bbb aaa
笔记:
\s
是GNU唯一的扩展。 sed的所有实现都理解像[[:space:]]
和[[:alnum:]]
这样的字符类。-E
来获取扩展的正则表达式。这消除了对反斜杠的需要,并且还使得使用+
表示一个或多个。$ read a b c<<<"aaa bbb"; echo "$b $a"
bbb aaa
$ read a b c<<<"aaa bbb ccc"; echo "$b $a"
bbb aaa
$ echo "aaa bbb" | awk '{print $2,$1}'
bbb aaa
$ echo "aaa bbb ccc" | awk '{print $2,$1}'
bbb aaa