我有一个包含文本的文本文件,例如
../path-to-image/folder1/image.jpg path-to-another-image/folder2/image.png
我想删除“../”部分并获取
path-to-image/folder1/image.jpg path-to-another-image/folder2/image.png
我尝试过使用sed和
sed -i 's#../##g' file.txt
但我获得了以下内容:
path-to-imafoldeimage.jpg path-to-another-imafoldeimage.png
删除了所有斜杠和其他一些字符,因此我的图像路径被破坏了。
我查找了如何使其与
完全匹配\<\>
sed 's#\<../\>#%%#g' file.txt
但输出与输入相同。有没有办法使用sed删除“../”?我需要这个命令行,因为我有大约10个具有相似路径结构的文件,我将其复制到一堆目录中。意思是我无法手动执行此操作。
答案 0 :(得分:1)
.
在正则表达式语法中具有特殊含义,需要进行转义。
[.]
(创建大小为1的字符类)或\.
就足够了;我强烈建议前者,因为它在更广泛的引用语境中正常工作。因此:
sed -i 's#[.][.]/##g' file.txt
答案 1 :(得分:0)
点是正则表达式中的特殊字符。它们表示任何字符(换行符除外)。所以你需要在sed命令中用反斜杠转义它们:
sed -i 's#\.\./##g' file.txt
答案 2 :(得分:0)
执行sed -i 's/\.\.\///g' file.txt
's/\.\.\///g'
将../
替换为空字符串,截至语法为's/string/replacement/g'
\.\.\/
转义点和斜线,这是必要的,因为点和斜线是正则表达式中的特殊字符。转义\.\.\/
后,字符串将显示../
。
以下两个斜杠围绕replacement
字符串,在这种情况下为空。
修改强>:
为了更容易读取(并避免逃避斜线):
sed -i 's#\.\.\/##g' file.txt
。这更接近您的初始尝试,并且作为修订后的解释,\.\./
转换为../
,因为斜杠不再需要转义。这些点仍然是特殊字符,必须使用反斜杠进行转义。