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