This question already has answers here:

exchange two words using sed in Linux
(5个答案)
我正在尝试编写一个shell脚本,它可以在一行中切换第一个和第三个单词。在这种情况下,只有包含字母(大写和小写)的字符串才算作单词,其他所有内容(数字、标点符号、空白)都被视为空白。
例如:
abc123def. ghi...jkl

会变成:
ghi123def. abc...jkl

我试过以下方法,但没有成功:
sed 's/\([a-zA-Z][a-zA-Z]*\)[^A-Z^a-z]\([a-zA-Z][a-zA-Z]*\)[^A-Z^a-z]\([a-zA-Z][a-zA-Z]*\)/\3 \2 \1/' input.txt

最佳答案

使用sed

$ echo "abc123def. ghi...jkl" | sed -r 's/([A-Za-z]*)([^A-Za-z]*[A-Za-z]*[^A-Za-z]*)([A-Za-z]*)(.*)/\3\2\1\4/g'
$ ghi123def. abc...jkl

关于linux - Sed-如何在一行中切换两个单词,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43340096/

10-16 11:12