如何使用 bash 交换一行中的单词位置?

How to swap words position in a line using bash?

我有一个命令保存在字符串中。

 toserver="scp -q -i ssh_key1.pem outfile ec2-user@ec2-18-205-233-131.compute-1.amazonaws.com:/home/ec2-user/outfile"

而且,从上面我想交换文件位置并创建新变量。 我的意思是,如下所示。

fromserver="scp -q -i ssh_key1.pem ec2-user@ec2-18-205-233-131.compute-1.amazonaws.com:/home/ec2-user/outfile outfile"

输出文件名不会改变,但服务器地址可能会改变。 请建议如何执行此操作。

使用sed

$ fromserver=$(printf '%s\n' "$toserver" | sed s'/\([^.]*\.[^ ]*\) \([^ ]*\) \(.*\)/  /')
$ echo "$fromserver"
scp -q -i ssh_key1.pem ec2-user@ec2-18-205-233-131.compute-1.amazonaws.com:/home/ec2-user/outfile outfile