我希望你能帮助我:
以下是我必须进行字符串操作的一行:
./period/0.0.1/projectname/path/path/-rw-rw-r--filename.txt 2462
最后一个数字是文件大小,以后需要计算。
序列-rw-rw-r--
来自列出输出的文件,其中我将文件与目录分开,并跳过以" d"开头的所有行。
现在我需要摆脱行中的权利序列。
这是我的正则表达式,它正好击中目标:[/][-][-rwx]{9,9}
我用正则表达式检查器检查了它,并得到我想要的确切内容:
字符串/ - 包括以下9个字符。
我想要的是:替换此字符串" / - 包括以下9个字符"用一个斜杠/。 为避免转义,我在sed中使用管道作为分隔符。以下sed命令正常工作:
sed 's|teststring|/|g' inputfile > outputfile
问题:
当我更换" teststring"我的正则表达式并没有操纵任何东西:
sed 's|[/][-][-rwx]{9,9}|/|g' inputfile > outputfile
我根本没有错误,但在结果输出文件中没有字符串操作。
我在这里做错了什么?
请帮忙!
答案 0 :(得分:2)
您可以将此sed
与扩展的正则表达式一起使用:
sed -E 's|/-[-rwx]{9}|/|g' file
./period/0.0.1/projectname/path/path/filename.txt 2462
[/]
和[-]
-E
进行扩展正则表达式匹配.{9,9}
与.{9}
答案 1 :(得分:2)
您可以使用
sed 's|/-[-rwx]\{9\}|/|g'
请注意,在POSIX BRE模式中,为了指定限制量词,您需要转义大括号。
请参阅Bash demo:
s='./period/0.0.1/projectname/path/path/-rw-rw-r--filename.txt 2462'
echo $s | sed 's|/-[-rwx]\{9\}|/|g'
输出:
./period/0.0.1/projectname/path/path/filename.txt 2462
注意:用括号表达式包装每个字符不是一个好主意,[/]
= /
和[-]
= {{1} }。
答案 2 :(得分:1)
sed
默认使用BRE正则表达式,其中大括号应该被转义。
要么逃脱它们:
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