我有一个内容为“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/

10-17 02:29