如何从每行文本的开头删除一个字符串?

如何从每行文本的开头删除一个字符串?

我抓取目录的内容du -a /test1 | cut -f2并得到以下内容:

/test1/file1
/test1/directory1
/test1/directory1/file2

我希望使用类似cut、之类的东西sed,或者grep说“无论$(pwd)是什么,都把它从输出的前面切掉”。

例如,如果 /test1/ 包含另一个名为“test1”的目录,我希望在我的输出中保留该子目录,因此如果我有:

/test1/test1/

我的理想输出是

test1/

感谢您的帮助。

编辑:我已尝试了对字符串变量而不是文件使用 sed。我可以获得与我的示例类似的输出,但它要么每行删除多个 /test1 实例,要么只对变量的第一行进行操作。它的作用与“对于每行的开头,删除$(pwd),但每行只删除一次”不同

对字符串使用 sed答案仅适用于我的多行变量的第一行。给出的答案中没有涉及多行变量的主题。他们的解决方案有效,因为 PATH 变量不包含换行符。在我的例子中,它仅适用于变量的第一行,这不是所需的输出。

答案1

阅读man bash,特别是有关“参数扩展”的部分,并执行以下操作:

a="/a/b/c"
echo "$a"
b="${a%/*}"
echo "$b"
c="${b%/*}"
echo "$c"

相关内容