Regex Bash:sed和正则表达式的字符串操作不起作用:用斜杠替换字符串

Regex Bash:sed和正则表达式的字符串操作不起作用:用斜杠替换字符串,regex,sed,Regex,Sed,我希望你能帮助我: 下面是我必须处理的一行代码: ./period/0.0.1/projectname/path/path/-rw-rw-r--filename.txt 2462 其中,最后一个数字是文件大小,用于以后的计算 序列-rw-rw-r--来自一个文件列表输出,其中我将文件与目录分开,并跳过以“d”开头的所有行。 现在我需要去掉行中的权限序列 这是我的正则表达式,它正好达到了目标:[/][-][-rwx]{9,9} 我用正则表达式检查器检查了tat,得到了我想要的: 字符串/-包括以

我希望你能帮助我:

下面是我必须处理的一行代码:

./period/0.0.1/projectname/path/path/-rw-rw-r--filename.txt 2462
其中,最后一个数字是文件大小,用于以后的计算

序列
-rw-rw-r--
来自一个文件列表输出,其中我将文件与目录分开,并跳过以“d”开头的所有行。 现在我需要去掉行中的权限序列

这是我的正则表达式,它正好达到了目标:
[/][-][-rwx]{9,9}
我用正则表达式检查器检查了tat,得到了我想要的: 字符串/-包括以下9个字符

我想要的是:将这个字符串“/-包括以下9个字符”替换为一个斜杠/。 为了避免溢出,我在sed中使用管道作为分隔符。以下sed命令工作正常:

sed 's|teststring|/|g' inputfile > outputfile
问题是:

当我将“teststring”替换为我的正则表达式时,它没有操作任何东西:

sed 's|[/][-][-rwx]{9,9}|/|g' inputfile > outputfile
我没有得到任何错误,但在结果outputfile中没有字符串操作

我在这里做错了什么


请帮忙

您可以将此
sed
与扩展正则表达式一起使用:

sed -E 's|/-[-rwx]{9}|/|g' file

  • 无需在正则表达式中使用
    [/]
    [-]
  • 使用
    -E
    进行扩展正则表达式匹配
  • {9,9}
    {9}
您可以使用

sed 's|/-[-rwx]\{9\}|/|g'
请注意,在POSIX BRE模式中,为了指定限制量词,需要转义大括号

见:

输出:

./period/0.0.1/projectname/path/path/filename.txt 2462
注意:用括号表达式包装每个单独的字符不是一个好主意,
[/]
=
/
[-]
=
-

sed
默认情况下使用正则表达式,其中括号应该转义

要么逃离他们:

sed 's|[/][-][-rwx]\{9,9\}|/|g' inputfile > outputfile
或切换到ERE:

sed -n 's|[/][-][-rwx]{9,9}|/|g' inputfile > outputfile # for GNU sed
sed -E 's|[/][-][-rwx]{9,9}|/|g' inputfile > outputfile # for BSD sed & modern GNU sed
作为补充说明,您的正则表达式可以简化为
/-[-rwx]{9}

sed -E 's|/-[-rwx]{9}|/|g' inputfile > outputfile
sed -n 's|[/][-][-rwx]{9,9}|/|g' inputfile > outputfile # for GNU sed
sed -E 's|[/][-][-rwx]{9,9}|/|g' inputfile > outputfile # for BSD sed & modern GNU sed
sed -E 's|/-[-rwx]{9}|/|g' inputfile > outputfile