我有一个变量的内容“eth0 eth1 bond0”,有没有一种方法使用sed或类似的工具来移动任何匹配bond.*
到行的开头的东西?Sed将文本移至行首?
2
A
回答
4
使用无非击:
$ var="eth0 eth1 bond0"
$ [[ $var =~ (.*)\ (bond.*) ]]
$ var="${BASH_REMATCH[2]} ${BASH_REMATCH[1]}"
$ echo "$var"
bond0 eth0 eth1
编辑:
这个版本处理 “保函” 的字符串中的任意位置多次出现:
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
版本是特定的字符串“债券”后面跟着一个或多个数字,而不是允许以“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
3
你还可以使用AWK
echo "eth0 bond1 eth1 bond0 eth2 bond2" | awk '{
for(i=1;i<=NF;i++)
if($i~/bond/){a[++d]=$i}
else{b[++e]=$i}
}END{
for(i=1;i<=d;i++){
printf a[i]" "
}
for(i=1;i<=e;i++){
printf b[i]" "
}
}'
输出
$ ./shell.sh
bond1 bond0 bond2 eth0 eth1 eth2
0
这可能会为你工作:
echo "eth0 bond0 eth1 bond1 eth2 bond2" | sed ':a;s/\<\([^b]*\) \(b.*\)/\2 \1/g;ta'
bond0 bond1 bond2 eth0 eth1 eth2
该作品以感人的语言不b
begining那些文字背后。
相关问题
- 1. SED将文字移至下一行
- 2. 将文本字段溢出至多行
- 3. 将所有行移至第一个行
- 4. 移动文本使用的sed
- 5. 使用按钮将文本从文本字段移至文本区
- 6. bash sed如何追加到行首,匹配变量在行首
- 7. 将旧项目移至新版本
- 8. 将TFS2010移至域
- 9. SplFileObject将指针移至上一行
- 10. 创建和删除文件夹。将文件移至文件夹并将文件移至文件夹以外
- 11. 将内嵌javascript移至外部文件
- 12. 将光标移至文件开头?
- 13. 将文字右移至图像
- 14. 将SOLR中的文档移至elasticsearch
- 15. 如何将文本中的数字移至数字?
- 16. 将搜索图像移至文本框右侧?
- 17. sed的首次出现的文本替换
- 18. 无法将文本移动到页首bootstrap
- 19. 如何将Zepplin笔记本从旧版本移至新版本?
- 20. Vb6-将焦点移至PowerPoint
- 21. 将SharePoint 2007迁移至2010
- 22. 将WordPress从GoDaddy移至AWS
- 23. 将徽标移至右侧
- 24. 将小计移至列
- 25. 将Magento移至新域名
- 26. 将SQL2005应用移至SQL2008
- 27. 将jquery项目移至Magento
- 28. 移调行至Colums SQL
- 29. 移调(也许)行至列
- 30. 将Azure资源移至新订阅 - 从BizSpark迁移至BizSpark Plus
谢谢你,这两种情况都涵盖了,单个和多个债券实例很有用。* :) – f10bit 2010-01-02 12:43:01