我有一个内容为“eth0 eth1 bond0”的变量,有没有方法使用sed或类似的工具将任何匹配的bond.*
移动到行的开头?
最佳答案
只使用猛击:
$ var="eth0 eth1 bond0"
$ [[ $var =~ (.*)\ (bond.*) ]]
$ var="${BASH_REMATCH[2]} ${BASH_REMATCH[1]}"
$ echo "$var"
bond0 eth0 eth1
编辑:
此版本处理字符串中任意位置多次出现的“bond”:
var="eth0 bond0 eth1 bond1 eth2 bond2"
for word in $var
do
if [[ $word =~ bond ]]
then
begin+="$word "
else
end+="$word "
fi
done
var="$begin$end"
var="${var%* }" # if you need to strip the trailing space
echo "$var"
输出:
bond0 bond1 bond2 eth0 eth1 eth2
编辑2:
这里有一个
sed
版本,它特定于字符串“bond”后跟一个或多个数字,而不是允许任何以“b”开头的单词:$ echo "eth0 bond0 eth1 bond1 eth2 bond2" |
sed 's/\<bond[[:digit:]]\+/\n&\n/g; s/ //g; :a; s/\(.*\)\n\(bond[[:digit:]]\+\)/\2 \1/;ta; s/\n/ /g'
bond0 bond1 bond2 eth0 eth1 eth2
关于bash - sed将文本移到行首?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1990625/