我制作了一个脚本,该脚本有时使用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.*"
在这种情况下,也许可以对其进行修改以使其起作用?
答案 0 :(得分:0)
请您尝试以下。
cho "5G /home/azarilh/folder/asd" | sed 's/\([^ ]* \)\/[^/]*\/[^/]*\(.*\)/\1\2/'
详细说明: 在此处使用sed
的组引用功能,这使我们可以将标识为{{1}的匹配正则表达式保存到缓冲存储器中},1
等。因此,当在2
与在行中找到的匹配项之间提到正则表达式时,它将以数字的引用形式保存到内存中(这将取决于其匹配号,例如->第一个匹配的正则表达式引用号为\(....\)
。
第二个解决方案: :如果您同意使用\1
解决方案,它将非常简单(考虑到您始终必须以相同的方式打印输出)。
awk
答案 1 :(得分:0)
这应该做到:
echo "5G /home/azarilh/folder/asd" | sed -e 's+/home/azarilh+~+g'
# output: 5G ~/folder/asd
使用sed
时,您可以指定模式,更改的内容类似于s/from/to/g
(将“从”更改为“至”),但是/
分隔符几乎可以是任何东西。因此,如果您要修改的字符串中有/
斜杠,则可以使用/
以外的其他字符,例如上面的+
。
您还可以在任何输出sed -e "s+${HOME}+~+
上将${HOME}
目录替换为~
。
但是我想我也应该提到,通过在du -hs ./*
目录中运行${HOME}
,可以获得与所需类似的输出。
答案 2 :(得分:0)
这应该有效。
删除/ home / azarilh部分,并将其替换为〜。
我想这就是你想要的,对吧?
$ echo "5G /home/azarilh/folder/asd" | sed -e 's/\/home\/azarilh/~/g'
5G ~/folder/asd