交换由符号分隔的两个任意长度的字符串

交换由符号分隔的两个任意长度的字符串

我试图通过搜索符号“-”的第一次出现将由任意数量的空格分隔单词组成的文件名拆分为两个单独的字符串,然后切换这些字符串的顺序。例如,如果文件名最初是

单词 1 单词 2 ... 单词 9 - 单词 A 单词 B ... 单词 Z

那么期望的输出是

单词A 单词B ... 单词Z - 单词1 单词2 ... 单词9

请注意,“-”两侧最多可以有 1 个单词。我的 sed 代码是

sed -r 's/([a-zA-Z0-9]+) \- ([a-zA-Z0-9])*/\2 \- \1/'

我的问题是如何在 sed 中指定“-”之前和之后的任意数量的单词。我知道 sed 最多只支持 9 种模式。

我读了过去的一个问题但问题是关于切换已知的固定数量的单词。

答案1

尝试这个:

echo 'word1 word 2 ... word9 - wordA wordB ... wordZ' | sed 's/\(.*\) - \(.*\)/\2 - \1/'

输出:

单词A 单词B ... 单词Z - 单词1 单词2 ... 单词9

相关内容