regex - (regex,sed) 擦除单词后如何附加擦除的单词
问题描述
我想改变什么
.:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:.:/sbin:/bin
我想做的
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:.
我想拿起所有点(“。”),并想附加到行尾。
如果该行中没有点(“.”),则它只打印该行。
我可以擦除有点的行中的点。/\.:/
但在这种情况下( ),我不能将点附加到行尾。
$ echo /usr/local:.:/bin | sed -r -e "/\.:/s/(\.:)//g"
擦除单词后如何仅使用sed
命令附加擦除的单词?
解决方案
您可以使用
#!/bin/bash
s='.:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:.:/sbin:/bin'
sed -r -e 's/(.+)\.:/.:\1/' -e 's/(.)\.:/\1/g' -e 's/\.:(.+)/\1:./' <<< "$s"
# => /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:.
查看在线演示
这里,
s/(.+)\.:/.:\1/
在您的字符串中的任何位置找到一个.:
子字符串并将.:
找到的移动到字符串的开头s/(.)\.:/\1/g
删除字符串中的所有非初始.:
字符组合,然后s/^\.:(.+)/\1:./
删除.:
字符串开头的 并粘贴:.
到结尾。
推荐阅读
- cmake - add_custom_target 并不总是重新运行
- haskell - If 语句使用 IO Int haskell
- c# - 右键单击部署时如何运行--publish-local-settings?
- r - dplyr: case_when() over multiple columns with multiple conditions
- azure - 在 ARM 模板中为所有可能的OutboundIpAddresses 配置 FirewallRules
- solr - edismax 查询 - 如何在 solr 中实现类似 db2 的搜索
- mongodb - 使用 Rasa 进行 NoSQL 注入
- php - 内部页面的htaccess重定向问题
- python - 我的动画图像没有使用 matplotlib imshow 动画改变
- javascript - 如何将 404 错误 XMLHttpRequest 修复到本地主机