如何用单个斜杠替换多个正斜杠

时间:2019-08-27 18:06:21

标签: regex bash awk sed

我在文件名中使用多个斜杠时遇到了一些问题,我想将它们替换为一个斜杠。

这些是在多个bash脚本相互调用的基础上生成的。

所以文件名就像

const myFunction_4 = (payload: IMyFunctionInput): IMyFunctionOutput => {
    return {
        a: 1,
        b: 2,
        c: 3 // Object literal may only specify known properties, and 'c' does not exist in type 'IMyFunctionOutput'.
    };
};

应该用看起来像这样的东西代替

/dir1/dir2/dir3//dir4////text3.txt

它在bash脚本中运行,因此应使用sed之类的基本内容。

谢谢

3 个答案:

答案 0 :(得分:5)

请您尝试以下。

sed -E 's#/+#/#g'  Input_file

输出如下。

/dir1/dir2/dir3/dir4/text3.txt

说明: :向-E添加sed选项将使我们能够将ERE添加到解决方案中。与sed的常规分隔符不同,/使用#作为sed命令的分隔符(为避免混淆,因为OP的样本在Input_file中包含/,因此其最好使用不同的分隔符),然后提及/+将替换所有/的出现,并将它们与单个/ g标志一起使用,以确保其在全局范围内发生。

答案 1 :(得分:3)

您可以使用tr“ squeeze” 选项:

echo "/dir1/dir2/dir3//dir4////text3.txt" | tr -s '/'
/dir1/dir2/dir3/dir4/text3.txt

答案 2 :(得分:0)

使用awk

awk '{$1=$1}1' FS="/+" OFS="/" file
/dir1/dir2/dir3/dir4/text3.txt

将输入字段分隔符设置为一个或多个/+,将Output FS设置为一个/