Bash 从文本文件的每一行中删除当前路径部分
我有一个生成文本文件的bash脚本。但我想从每一行中删除当前路径部分。我试着运行“cut-d”/ --补充-s-f1-4“命令。但是我想要一些动态的方法来做。有人能帮我吗?谢谢大家! 示例文本文件:Bash 从文本文件的每一行中删除当前路径部分,bash,shell,scripting,Bash,Shell,Scripting,我有一个生成文本文件的bash脚本。但我想从每一行中删除当前路径部分。我试着运行“cut-d”/ --补充-s-f1-4“命令。但是我想要一些动态的方法来做。有人能帮我吗?谢谢大家! 示例文本文件: /local/name1/test/dir/file1.c /local/name1/test/dir/subdir/file2.h /local/name1/test/dir2/file3.txt 当前路径: /local/name1/test/ 预期结果: dir/file1.c dir/s
/local/name1/test/dir/file1.c
/local/name1/test/dir/subdir/file2.h
/local/name1/test/dir2/file3.txt
当前路径:
/local/name1/test/
预期结果:
dir/file1.c
dir/subdir/file2.h
dir2/file3.txt
使用sed,您可以执行以下操作:
sed 's~^/local/name1/test/~~' file
dir/file1.c
dir/subdir/file2.h
dir2/file3.txt
如果当前路径保存在变量p
中,则使用:
sed "s~^$p~~" file
您可以使用
PWD
和bash
参数展开来获得动态行为:
"${var#$PWD/}"
首先将文件路径另存为var
。在这里,$PWD
将扩展到当前工作目录,参数扩展将获得文件名在$PWD
之后的部分
示例:
$ var=/home/foobar/spam/foo/bar.c
$ echo "${var#$PWD/}"
foo/bar.c
谢谢@anubhava。它很好用。但它在开始时仍然会有一个额外的斜杠,我在回答中已经显示了sed的输出,但没有任何前导斜杠。确保变量
p
中有尾随斜杠。是。我在路径变量中添加了反斜杠。现在它运行良好。谢谢你的帮助。谢谢@heemail的及时回复和帮助。