aho corasick字符串替换实用程序

fsed的Python项目详细描述


Travis CI build statusTest code coverageLatest Version

版权所有(c)2015 Will Roberts<;wildwilhelm@gmail.com>;

根据麻省理工学院的许可证授权(参见文件LICENSE.rst获取 详细信息)。

在文件上搜索和替换,并在固定字符串上匹配。

fsed是一个专门为您必须 执行many字符串搜索并用固定字符串替换操作 (即,fsed不做正则表达式)。通过做所有的 同时搜索和替换所有模式,fsed 可以比在 时间(就像sedperl中的一行代码)。

为了进行搜索,fsed使用Aho-Corasick algorithm, 这是一种非常聪明的方法,可以同时匹配多个模式 时间,并用于实现原始的fgrepunix实用程序 (现在作为grep -F访问)。这个算法能够找到 相互重叠的匹配项,在这些情况下,fsed必须 选择要重写的匹配项。fsed采用的策略是 贪婪,总是先重写最短、最左边的匹配。

为了说明这一点,想象一下我们想重写的情况 a带有baa带有c,以及aaa带有d。什么 当我们看到输入字符串aaa时应该这样做吗?我们应该生产 bbbbccbdfsed在此生成bbb。 案例。

安装

fsed写入Python;您可以使用pip

pip install fsed

用法

fsed [OPTIONS] PATTERN_FILE [INPUT_FILE [INPUT_FILE2 ...]]

如果指定了一个或多个INPUT_FILEs,则fsed读取并 将这些连接为其输入;否则,fsed将读取 标准输入。

选项:

--pattern-format=FMT
将fmt设置为tsvsed(默认为sed),以指定 PATTERN_FILE的格式。
-o/--output=OUTFILE
指定程序输出应写入OUTFILE。 如果不使用此选项,fsed将写入标准输出。
-w/--words
使fsed只在单词边界上匹配;此标志指示 fsed\b附加到每个 模式在PATTERN_FILE
--by-line/--across-lines
设置fsed是否应逐行处理输入 或逐个字符;默认值为--across-lines
--slow
表示fsed应该非常努力地始终找到 最长的输入匹配;这非常慢,并且 --by-line打开。
-q
安静操作,不发出警告。
-v/--verbose
打开调试输出。

注意:使用PyPy

pypy -m fsed.fsed [OPTIONS] PATTERN_FILE [INPUT_FILE [INPUT_FILE2 ...]]

模式文件

PATTERN_FILE包含要在其中搜索和替换的模式列表 输入;每种模式都列在一行。fsed 支持两种指定模式的格式。默认值,sed, 按sed实用程序的方式指定字符串及其替换 是否:

s/SEARCH/REPLACE/

s字符后面的字符是模式分隔符, 可以是任何字符(不必是正斜杠)。

另一种格式tsv使用^{tt56}指定模式$ 字符作为分隔符:

SEARCH<TAB>REPLACE

在这种格式中,每行只能有一个<TAB>字符。

模式可以包含转义字符:

\\
反斜杠(\)
\a
ascii铃(bel)
\b
单词边界
\f
ascii格式馈送(ff)
\n
ASCII换行符(lf)
\r
回车(CR)
\t
水平选项卡(选项卡)
\v
ascii垂直制表符(vt)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java将视图从constraint layouts类外部膨胀为约束布局   java如何使用testng参数化selenium中的用户数据并将其馈送到脚本   安卓 Java正则表达式在两个字符串之间提取字符串   java使用继承类的生成生成器,而生成器本身不继承   java匹配两个相同字符之间的字符串   java在ArrayList中添加项的值   主方法完成后的java Swing计时器持久性   使用Android应用程序的Java/Tomcat服务器中的Windows身份验证   java多态性银行应用程序   java如何添加拉丁文5字符?   java如果没有浏览器,我如何以编程方式触发google analytics事件?   如果存在零,则java向左移动   java大数幂法   java试图将XML文件中的ID读入不同的列表?