我有以下字符串:
"5 S comment=whatever Unspecific text fruit=apple animal=mouse sky=blue"
我需要移动到字符串的末尾,所有这些都以comment
单词开头text
。
开头始终为 be comment=
,分隔符始终为fruit
。comment=
... 和分隔符之间的值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