Regex 在Perl中,如何使用正则表达式替换运算符替换子字符串中的非ASCII字符?
如何使用此命令:Regex 在Perl中,如何使用正则表达式替换运算符替换子字符串中的非ASCII字符?,regex,perl,Regex,Perl,如何使用此命令: perl -pi -e 's/[^[:ascii:]]/#/g' file 要仅将每行的偏移量A处的字符更改为偏移量B吗?在我没有正确理解您的问题的保留下,如果偏移量A和B分别为5和10,则应如下所示: perl -pi -e 's/(?<=.{5})(?<!.{10})[^[:ascii:]]/#/g' file substr EXPR、OFFSET、LENGTH的描述可以是。 这个例子很好地说明了如何使用substr()作为左值。 附录2 当更新这篇文
perl -pi -e 's/[^[:ascii:]]/#/g' file
要仅将每行的偏移量A处的字符更改为偏移量B吗?在我没有正确理解您的问题的保留下,如果偏移量A和B分别为5和10,则应如下所示:
perl -pi -e 's/(?<=.{5})(?<!.{10})[^[:ascii:]]/#/g' file
substr EXPR、OFFSET、LENGTH的描述可以是。
这个例子很好地说明了如何使用substr()
作为左值。
附录2
当更新这篇文章时,添加了与答案相同的解决方案,但他的答案是第一个!(所以他应该得到战利品)
问候
rbo除了橡胶靴的答案外,您还可以操作一个子字符串,而不是从整个字符串开始:
perl -pi -e 'substr($_, 5, 5) =~ s/[^[:ascii:]]/#/g' file
举例说明:
perl -e 'print "\xff" x 16' | \
perl -p -e 'substr($_, 5, 5) =~ s/[^[:ascii:]]/#/g' | \
hd
将打印
ff ff ff ff ff 23 23 23 23 23 ff ff ff ff ff ff
在这段代码中,第一个偏移量是基于0的,您必须使用长度而不是第二个偏移量,因此它将是
substr($\uz,A-1,B-A)
一些实际和预期的数据示例会有所帮助。我也没有注意到标题中的“with substr”,或者更确切地说,将其解释为“在子字符串内”,因此我认为您的解决方案的有效性不亚于我的解决方案。。。
perl -pi -e 'substr($_, 5, 5) =~ s/[^[:ascii:]]/#/g' file
perl -e 'print "\xff" x 16' | \
perl -p -e 'substr($_, 5, 5) =~ s/[^[:ascii:]]/#/g' | \
hd
ff ff ff ff ff 23 23 23 23 23 ff ff ff ff ff ff