我希望最终匹配带有或不带冗余字符串的规则。并交换匹配模式 示例:
$ "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
谢谢。
答案 0 :(得分:2)
尝试:
$ 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
注意:
sed识别POSIX正则表达式。 \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
答案 1 :(得分:0)