如何使用sed单次命令移除路径开头的./或../前缀?
用单次sed命令移除路径开头的./或../
没问题,你完全可以用一条sed命令搞定两种前缀的移除,不用分开写两条。这里给你两个实用的写法,按需选就行:
方法1:明确匹配两种前缀
直接用正则分支匹配./或../,替换成空字符串:
sed -E 's/^(\.\/|\.\.\///' your_file.txt
简单解释下:
-E开启扩展正则,这样不用额外转义括号和竖线,写起来更清爽^锚定行开头,确保只替换路径最前面的前缀,不会误改中间出现的类似字符串(\.\/|\.\.\//精准匹配两种开头:要么是./,要么是../- 替换部分留空,就把匹配到的前缀直接删掉了
方法2:更紧凑的正则写法
如果觉得上面的分支不够简洁,也可以用数量词来简化:
sed -E 's/^\.{1,2}\///' your_file.txt
这个写法更凝练:
^\.{1,2}匹配行开头的1个或2个点(对应.或..)\/匹配点后面的斜杠- 合起来就是匹配
./或../,效果和第一种完全一样
测试效果示例
假设你的your_file.txt内容是:
./docs/readme.md ../src/utils.py ./tests/unit/test_auth.py ../config/dev.env normal/path/file.txt
运行上面任意一条命令后,输出会变成:
docs/readme.md src/utils.py tests/unit/test_auth.py config/dev.env normal/path/file.txt
完全不会影响那些没有特殊前缀的正常路径。
如果需要直接修改原文件(操作前建议备份),可以加上-i参数:
# Linux环境 sed -i -E 's/^\.{1,2}\///' your_file.txt # MacOS环境(需要加空字符串参数避免生成备份文件) sed -i '' -E 's/^\.{1,2}\///' your_file.txt
内容的提问来源于stack exchange,提问作者VinAlencc
相关产品推荐
相关产品推荐

