将一系列单词移至字符串末尾

将一系列单词移至字符串末尾

我有以下字符串:

"5  S comment=whatever Unspecific text fruit=apple animal=mouse sky=blue"

我需要移动到字符串的末尾,所有这些都以comment单词开头text

开头始终为 be comment= ,分隔符始终为fruitcomment=... 和分隔符之间的值fruit是可变的。

有什么建议吗?

答案1

如果该字符串位于 shell 变量中,并且该 shell 是zsh,您可以执行以下操作:

string='5  S comment=whatever Unspecific text fruit=apple animal=mouse sky=blue'
new_string=${string/(#b)(comment=*)(fruit*)/$match[2] $match[1]}

如果该外壳是ksh93

new_strong=${string//@(comment=*)@(fruit*)/\2 \1}

如果该 shell 是 POSIX shell(就像这两个 shell,bash或者sh现代系统的 shell):

a=${string%%comment=*}
b=${string#"$a"}
b=${b%fruit*}
c=${string#"$a$b"}
new_string=$a$c$b

对于文件的每一行:

sed 's/\(comment=.*\)\(fruit.*\)/\2 \1/' < file

如果每行/字符串有多个,则所有这三个部分都会匹配从最左边comment=到最右边的部分。fruit

相关内容