使用sed从文本文件中删除“../”

时间:2017-07-28 19:46:38

标签: bash sed

我有一个包含文本的文本文件,例如

../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个具有相似路径结构的文件,我将其复制到一堆目录中。意思是我无法手动执行此操作。

3 个答案:

答案 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。这更接近您的初始尝试,并且作为修订后的解释,\.\./转换为../,因为斜杠不再需要转义。这些点仍然是特殊字符,必须使用反斜杠进行转义。