用sed删除(或替换)带有斜杠的单词

用sed删除(或替换)带有斜杠的单词,sed,Sed,我制作了一个脚本,在某个时候使用du来显示目录中使用的空间。我希望在字符串中不显示“/home/azarih”。我试着用一个例子来消除这个问题 我所拥有的: 5G /home/azarilh/folder/asd 我想要的是: 5G /folder/asd 我尝试过(以echo代替du为例): 也许可以修改它使其在这种情况下工作?请尝试以下内容 cho "5G /home/azarilh/folder/asd" | sed 's/\([^ ]* \)\/[^/]*\/[^/]*\(.*\)/

我制作了一个脚本,在某个时候使用du来显示目录中使用的空间。我希望在字符串中不显示“/home/azarih”。我试着用一个例子来消除这个问题

我所拥有的:

5G /home/azarilh/folder/asd
我想要的是:

5G /folder/asd
我尝试过(以echo代替du为例):


也许可以修改它使其在这种情况下工作?

请尝试以下内容

cho "5G /home/azarilh/folder/asd" | sed 's/\([^ ]* \)\/[^/]*\/[^/]*\(.*\)/\1\2/'
详细说明:在这里使用
sed
的组引用功能,它允许我们将匹配的正则表达式保存到缓冲内存中,并标识
1
2
等。因此,当在
\(..)
和第行中找到的匹配项之间提到正则表达式时,它将以数字为参考保存到内存中(这取决于它的匹配编号,例如-->第一个匹配的正则表达式参考编号将是
\1


第二种解决方案:如果您对
awk
解决方案满意,那么它将非常简单(考虑到您必须始终以相同的方式打印输出)

这应该做到:

echo "5G /home/azarilh/folder/asd" | sed -e 's+/home/azarilh+~+g'
# output: 5G ~/folder/asd

当您使用
sed
时,您可以指定要更改的模式,例如
s/from/to/g
(将“from”更改为“to”),但是
/
分隔符几乎可以是任何东西。因此,如果要修改的字符串中有
/
斜杠,则可以使用
/
以外的内容,例如上面提到的
+

您还可以在任何输出
sed-e“s++${HOME}++
上使用
${HOME}
替换
${HOME}
目录

但是我想我还应该提到,通过在
${HOME}
目录中运行
du-hs./*
可以获得与所需类似的输出。

这应该可以

拆下/home/azarilh部件,并将其更换为~

我想这就是你想要的,对吧

$ echo "5G /home/azarilh/folder/asd" | sed -e 's/\/home\/azarilh/~/g'
5G ~/folder/asd

\这三个答案都有效,但使用另一个字符代替斜杠确实很有用,也很容易理解,因此,这是最好的答案。谢谢。您的du解决方案tho在目录开头留下一个点,肯定比完整路径更好,但用我想要的任何内容替换它会更好。
echo "5G /home/azarilh/folder/asd" | awk -F'[ /]' '{print $1 OFS "/"$(NF-1)"/"$NF}'
echo "5G /home/azarilh/folder/asd" | sed -e 's+/home/azarilh+~+g'
# output: 5G ~/folder/asd

$ echo "5G /home/azarilh/folder/asd" | sed -e 's/\/home\/azarilh/~/g'
5G ~/folder/asd