sed - 用 sed 删除(或替换)带有斜线的单词
问题描述
我制作了一个在某些时候使用 du 的脚本,以显示目录中使用的空间。我希望在字符串中没有“/home/azarilh”的情况下显示它。我试图用一个例子来删除它......
是)我有的:
5G /home/azarilh/folder/asd
我想得到什么:
5G /folder/asd
我尝试过(以 echo 代替 du 为例):
echo "5G /home/azarilh/folder/asd" | sed -e 's/\<\/home\/azarilh\>//g'
获得“~/folder/asd”而不是仅仅删除“/home/azarilh”会更好。不需要sed,我试过grep但没有成功。我使用 grep 删除前缀并且它有效。
echo "$string" | grep -oP "^$prefix\K.*"
也许可以修改它以在这种情况下工作?
解决方案
请您尝试以下操作。
cho "5G /home/azarilh/folder/asd" | sed 's/\([^ ]* \)\/[^/]*\/[^/]*\(.*\)/\1\2/'
详细解释:这里使用sed
's 组引用能力,它允许我们将匹配的正则表达式保存到带有 等标识的缓冲内存1
中2
。因此,当在中间提到一个正则表达式\(....\)
并且在行中找到一个匹配项时,它将参考数字保存到内存中(这将取决于其匹配的编号,例如->第一个匹配的正则表达式参考编号将是\1
)。
第二种解决方案:如果您对awk
解决方案感到满意,那将非常简单(考虑到您总是必须以相同的方式打印输出)。
echo "5G /home/azarilh/folder/asd" | awk -F'[ /]' '{print $1 OFS "/"$(NF-1)"/"$NF}'
推荐阅读
- python - 我如何绘制这个?
- python - 写入文本文件时出现奇怪的空字符
- python - 为什么 ALTER TABLE xy ALTER COLUMN ab TYPE 类型在 PostgreSQL 中不起作用?
- excel - 加快我的宏以在 Excel 中复制粘贴多达 900 个单元格
- c++ - 在 C 中是否有针对此问题的替代解决方案?
- android - 如果在 Kotlin 中包含超过 10 个单词,如何更改 textview 高度(代码)
- windows - 将文件夹和内容复制到 Windows 10 上的不同文件夹
- mongodb - 按周对 mongodb 进行排序,然后对数据求和并取平均值
- html - 视角不好的角垫卡
- angular - Angular + Nginx + Kubernetes - 部署子目录问题