lineinfile

2025-12-11 0 661

github | PYPI |问题| ChangElog

lineinfile受同一名称的Ansible模块的启发,如果尚不存在,则提供了一个命令和库,用于将行添加到文件中,并删除与文件中的模式匹配的线路。有一些选项可以使用正则拨号来查找以更新的线路或确定在之前或之后要插入哪个行的选项。有一些选项可以使用自定义文件扩展名来备份修改后的文件,并且可以将不存在的文件处理好,好像它只是空的。甚至还有一个选项可以根据匹配的正则捕获的捕获组来确定插入行。

与Ansible模块不同,此软件包不会执行任何文件属性管理。这些必须在外部设置。

安装

lineinfile需要Python 3.8或更高。只需将PIP用于Python 3(您有PIP,对吗?)即可安装lineinfile及其依赖关系:

 python3 -m pip安装lineinfile

例子

一个粗制的.ini文件更新程序:将theoption设置为价值,如果在文件中找不到theoption的设置,请在“ [thesection randrand and thesection randrand and thesection randrand and)之后添加一个:

lineinfile add \\
–after-first "^\\[thesection\\]$" \\
-e "^theoption\\s*=" \\
"theoption = thevalue" \\
settings.ini\”>

$ lineinfile add \\
    --after-first \"^\\[thesection\\]$\" \\
    -e \"^theoption\\s*=\" \\
    \"theoption = thevalue\" \\
    settings.ini

Python的同等操作:

lineinfile import AfterFirst, add_line_to_file

add_line_to_file(
"settings.ini",
"theoption = thevalue",
regexp=r"^theoption\\s*=",
inserter=AfterFirst(r"^\\[thesection\\]$"),
)\”>

 from lineinfile import AfterFirst , add_line_to_file

add_line_to_file (
    \"settings.ini\" ,
    \"theoption = thevalue\" ,
    regexp = r\"^theoption\\s*=\" ,
    inserter = AfterFirst ( r\"^\\[thesection\\]$\" ),
)

将“ foo = …”的第一个实例替换为“ foo ='bar'”,保留缩进,并使用扩展名.bak创建文件备份,即使没有进行更改:

lineinfile add \\
-e "^(\\s*)foo\\s*=" \\
–backrefs \\
–match-first \\
–backup-always -i.bak \\
"\\1foo = \’bar\’" \\
file.py\”>

$ lineinfile add \\
    -e \"^(\\s*)foo\\s*=\" \\
    --backrefs \\
    --match-first \\
    --backup-always -i.bak \\
    \"\\1foo = \'bar\'\" \\
    file.py

Python的同等操作:

lineinfile import ALWAYS, add_line_to_file

add_line_to_file(
"file.py",
r"\\1foo = \’bar\’",
regexp=r"^(\\s*)foo\\s*=",
backrefs=True,
match_first=True,
backup=ALWAYS,
backup_ext=".bak",
)\”>

 from lineinfile import ALWAYS , add_line_to_file

add_line_to_file (
    \"file.py\" ,
    r\"\\1foo = \'bar\'\" ,
    regexp = r\"^(\\s*)foo\\s*=\" ,
    backrefs = True ,
    match_first = True ,
    backup = ALWAYS ,
    backup_ext = \".bak\" ,
)

命令行的用法

lineinfile命令有两个子命令,添加和删除。

添加

lineinfile add [<options>] <line> [<file>]
lineinfile add [<options>] -l <Line> [<file>]

如果尚未存在,则将给定的行(将BackSlash Exapes扩展后)添加到文件中。如果使用-e/ – Regexp选项给出了Python正则表达式,并且它与文件中的任何行匹配,则行将替换最后一个匹配行(或第一个匹配行,如果给出 – 匹配 – 先到第一个)。如果正则表达式不匹配任何行(或未指定正则表达式),并且在文件中找不到行,则默认情况下将在文件末尾插入该行;这可以通过 – 第一个之后, – 持久之后,以前,较长和 – bof选项。

如果在命令行上没有给出文件名,则从标准输入中读取输入,结果将写入标准输出。当没有给出文件时,指定任何一个 – backup-backup-eLways,-backup-ext或 – 创建选项的错误是错误的。

选项

-a正则-第一个正则延期
如果在文件中都没有找到行和-regexp,请在与正则表达式符合正则表达式的第一行之后插入线,或者在文件末尾插入如果没有行匹配的话,则在文件末尾插入。
-a正则-持久的正则罚款
如果在文件中都没有找到行和-regexp,请在与正则表达式符合正则表达式匹配的最后一行之后插入行,或者在文件末尾插入如果没有线匹配的话,则在文件末尾插入。
-b正则是第一个正则
如果在文件中都没有找到线路和-regexp,请在与正则表达式符合正则表达式的第一行之前插入行,或者在文件末尾插入,如果没有行匹配的话,则在文件末尾插入。
-B正则是- 前后的正则
如果在文件中都没有线和-regexp,请在与正则表达式符合正则表达式的最后一行之前插入行,或者在文件末尾插入,如果没有行匹配的话,则在文件末尾插入。
-bof 如果在文件中都没有找到行和-regexp,请在文件开头插入行。
- eof 如果在文件中都没有找到行和-regexp,请在文件末尾插入行。这是默认值。
-e Regex-regexp Regex
如果给定的正则表达式与文件中的任何行匹配,请用行替换最后的匹配行(或第一个(如果是匹配至上))。
- backrefs

如果-regexp匹配,则使用正则表达式中的捕获组来展开排队中的任何\\ n,\\ g <n>或\\ g <name> backeferences,并且所得的字符串替换了输入中的匹配行。

如果-regexp不匹配,则输入不变。

在没有-regexp的情况下指定此选项是一个错误。

- 回复- 倒巴改变
如果修改了输入文件,请创建原始文件的备份。备份将带有-backup-ext(或〜指定的扩展名)指定的扩展名附加到其文件名上。
- 始终
无论是否修改,都可以创建原始文件的备份。备份将带有-backup-ext(或〜指定的扩展名)指定的扩展名附加到其文件名上。
-i ext-backup-ext ext
创建一个输入文件的备份,并将EXT添加到文件名的末尾。含义 – 如果没有和 – 始终给出 – 背包变化。
-c- 创建

如果输入文件不存在,请假装它是空而不是错误的,并使用操作结果创建它。无论其他选项如何,都不会为不存在的文件创建备份文件。

如果不存在输入文件,也没有进行更改(因为指定了-backrefs,并且-regexp不匹配),则不会创建该文件。

-L线-线路
使用行作为插入的行。当线从连字符开始时,此选项很有用。
-m- 匹配优先
如果-regexp匹配,请用行替换第一个匹配行。
-m- 匹配last
如果-regexp匹配,请用行替换最后的匹配行。这是默认值。
-o文件- 输出文件文件

将结果文件内容写入文件,而不是修改输入文件。

使用任何一个 – backup-langed, – backup-eLways或-backup-ext指定此选项是错误的。

消除

lineinfile删除[<options>] <Regexp> [<file>]
lineinfile删除[<options>] -e <Regexp> [<file>]

删除与给定Python正则表达式匹配的给定文件中的所有行。

如果在命令行上没有给出文件名,则从标准输入中读取输入,结果将写入标准输出。当不给出任何文件时,指定任何 – backup-backup-eLways或-backup-ext选项的错误是错误的。

选项

- 回复- 倒巴改变
如果修改了输入文件,请创建原始文件的备份。备份将带有-backup-ext(或〜指定的扩展名)指定的扩展名附加到其文件名上。
- 始终
无论是否修改,都可以创建原始文件的备份。备份将带有-backup-ext(或〜指定的扩展名)指定的扩展名附加到其文件名上。
-i ext-backup-ext ext
创建一个输入文件的备份,并将EXT添加到文件名的末尾。含义 – 如果没有和 – 始终给出 – 背包变化。
-e Regex-regexp Regex
删除与正则匹配的所有行。当Regex从连字符开始时,此选项很有用。
-o文件- 输出文件文件

将结果文件内容写入文件,而不是修改输入文件。

使用任何一个 – backup-langed, – backup-eLways或-backup-ext指定此选项是错误的。

库API

请注意,所有正则表达式匹配都是使用tatter.search()方法完成的,即,它在行的开头没有锚定。为了强迫正则表达式以开始在线路的开头匹配,请以 ^或\\ a的前缀为前缀。

lineinfile.add_line_to_file(
filepath: Union[str, bytes, os.PathLike[str], os.PathLike[bytes]],
line: str,
regexp: Optional[Union[str, re.Pattern[str]]] = None,
inserter: Optional[Inserter] = None,
match_first: bool = False,
backrefs: bool = False,
backup: Optional[BackupWhen] = None,
backup_ext: Optional[str] = None,
create: bool = False,
encoding: Optional[str] = None,
errors: Optional[str] = None,
) -> bool\”>

 lineinfile . add_line_to_file (
    filepath : Union [ str , bytes , os . PathLike [ str ], os . PathLike [ bytes ]],
    line : str ,
    regexp : Optional [ Union [ str , re . Pattern [ str ]]] = None ,
    inserter : Optional [ Inserter ] = None ,
    match_first : bool = False ,
    backrefs : bool = False ,
    backup : Optional [ BackupWhen ] = None ,
    backup_ext : Optional [ str ] = None ,
    create : bool = False ,
    encoding : Optional [ str ] = None ,
    errors : Optional [ str ] = None ,
) - > bool

如果尚未存在,则将给定的行添加到文件中的文件中。如果修改文件,则返回true。如果将REGEXP设置为正则表达式(字符串或编译模式对象),并且与文件中的任何行匹配,则行将替换最后一个匹配的行(或第一个匹配行,如果match_first = true)。如果正则表达式不匹配任何行(或未指定正则表达式),并且在文件中找不到行,则默认情况下将在文件末尾插入该行;可以通过将适当的对象作为插入者参数传递来改变这一点。请参阅下面的“插入器”。

当BackRefs为True时,如果RegexP匹配,则使用正则表达式中的捕获组来扩展行中的任何\\ n,\\ g <n>或\\ g <name> backeference,并且所得的字符串替换了输入中的匹配行。如果BackRefs为True且RegexP不匹配,则文件不变。将BackRefs设置为true而不还设置Regexp是一个错误。

将备份设置为lineinfile 。改变时,如果修改了文件,则创建文件原始内容的备份。将备份设置为lineinfile .Lways时,无论文件是否修改,始终会创建备份。备份文件的名称将与原始文件相同,并附上backup_ext的值(默认值:〜)。

如果CREATE是真实的,并且不存在FilePath,请假装它是空而不是错误的,并通过操作结果创建它。对于不存在的文件,永远不会创建备份文件。如果不存在FilePath,也没有进行更改(因为设置了BackRefs,并且REGEXP与REGEXP不匹配),则不会创建文件。

lineinfile.remove_lines_from_file(
filepath: Union[str, bytes, os.PathLike[str], os.PathLike[bytes]],
regexp: Union[str, re.Pattern[str]],
backup: Optional[BackupWhen] = None,
backup_ext: Optional[str] = None,
encoding: Optional[str] = None,
errors: Optional[str] = None,
) -> bool\”>

 lineinfile . remove_lines_from_file (
    filepath : Union [ str , bytes , os . PathLike [ str ], os . PathLike [ bytes ]],
    regexp : Union [ str , re . Pattern [ str ]],
    backup : Optional [ BackupWhen ] = None ,
    backup_ext : Optional [ str ] = None ,
    encoding : Optional [ str ] = None ,
    errors : Optional [ str ] = None ,
) - > bool

删除符合正则表达式REGEXP(字符串或编译的模式对象)的文件中文件中的所有行。如果修改文件,则返回true。

将备份设置为lineinfile 。改变时,如果修改了文件,则创建文件原始内容的备份。将备份设置为lineinfile .Lways时,无论文件是否修改,始终会创建备份。备份文件的名称将与原始文件相同,并附上backup_ext的值(默认值:〜)。

lineinfile.add_line_to_string(
s: str,
line: str,
regexp: Optional[Union[str, re.Pattern[str]]] = None,
inserter: Optional[Inserter] = None,
match_first: bool = False,
backrefs: bool = False,
) -> str\”>

 lineinfile . add_line_to_string (
    s : str ,
    line : str ,
    regexp : Optional [ Union [ str , re . Pattern [ str ]]] = None ,
    inserter : Optional [ Inserter ] = None ,
    match_first : bool = False ,
    backrefs : bool = False ,
) - > str

如果尚未存在并返回结果,则将给定的行添加到字符串s。如果将REGEXP设置为正则表达式(字符串或编译模式对象),并且与输入中的任何行匹配,则行将替换最后一个匹配行(或第一个匹配行,如果Match_first = true)。如果正则表达式不匹配任何线(或未指定正则表达式),并且在输入中找不到线,则默认情况下将在输入末端插入该行;可以通过将适当的对象作为插入者参数传递来改变这一点。请参阅下面的“插入器”。

当BackRefs为True时,如果RegexP匹配,则使用正则表达式中的捕获组来扩展行中的任何\\ n,\\ g <n>或\\ g <name> backeference,并且所得的字符串替换了输入中的匹配行。如果BackRefs为True且RegexP不匹配,则输入将保持不变。将BackRefs设置为true而不还设置Regexp是一个错误。

lineinfile.remove_lines_from_string(
s: str,
regexp: Union[str, re.Pattern[str]],
) -> str\”>

 lineinfile . remove_lines_from_string (
    s : str ,
    regexp : Union [ str , re . Pattern [ str ]],
) - > str

从字符串s中删除匹配正则表达式REGEXP(字符串或编译模式对象)并返回结果的所有行。

插入者

插入器是add_line_*函数使用的对象,以确定在输入中找不到线路时插入线路的位置,如果设置了regexp参数,则不匹配任何行。

lineinfile提供以下插入器类:

atbof()
总是在文件开头插入线
ateof()
总是在文件末尾插入行
首先(regexp)
插入与给定的正则表达式匹配的第一个输入行之后的行(如果没有匹配,则匹配给定的正则表达式(字符串或编译模式对象),或者在文件末尾。
后光(Regexp)
插入与给定的正则表达式匹配的最后一个输入行之后的行(如果没有匹配,则匹配给定的正则表达式(字符串或编译模式对象),或者在文件末尾。
首先(regexp)
插入与给定的正则表达式(字符串或编译模式对象)匹配的第一个输入行之前的行,或者如果没有匹配,则在文件末尾。
Beforelast(Regexp)
在与给定的正则表达式匹配的最后一个输入行之前插入线路(字符串或编译模式对象),或者如果没有匹配,则在文件末尾插入。

线路结尾的处理

lineinfile使用Python的Universal Newlines模式在文件上运行,其中所有LF(\\ n),Cr LF(\\ r \\ n)和文件中的CR(\\ r)序列在文件中仅将读取为python字符串,而LF则转换为lf,而LF转换为“ disk to disk”时,将LF转换为操作系统的本机线分隔器。

在大多数情况下,这使您可以在正则表达式中使用$,并且无论该线结束在磁盘上,它始终与输入线的末端匹配。但是,当使用add_line_to_string()或带有非LF线分离器的字符串的remove_lines_from_string()时,情况可能会变得棘手。 lineinfile遵循有关行分隔符的以下规则:

  • 线仅由LF,CR和CR LF终止。
  • 当add_line_*函数将行参数与输入中的行进行比较时,从两行中剥离了行结尾。这是与Ansible行为的偏差,其中只有输入线被剥离。
  • 当将输入线与RegexP或插入器匹配时,线路结束不会剥离。请注意,像r“ foo $”这样的正则表达式将无法与非LF线结束结束的线路匹配,因此这可能会导致模式与您可能天真地期望它们匹配的位置与不匹配。
  • 在文件末尾添加一条线时,如果文件未以线路结束结束,则在添加行之前会附加LF。
  • 将行添加到文档(作为新行或替换预先存在的行)时,如果尚未以行分隔符结束,则将LF附加到该线路;将替换的任何线路上的任何线(如果有)被忽略(如果要保留它,请使用BackRefs)。如果结果线和替换线的唯一区别是线路结束,则仍会发生替换,则将线结束进行修改,并更改文档。

下载源码

通过命令行克隆项目:

git clone https://github.com/jwodder/lineinfile.git

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

申明:本文由第三方发布,内容仅代表作者观点,与本网站无关。对本文以及其中全部或者部分内容的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。本网发布或转载文章出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,也不代表本网对其真实性负责。

左子网 建站资源 lineinfile https://www.zuozi.net/35068.html

RoMe
上一篇: RoMe
deb822 rs
下一篇: deb822 rs
常见问题
  • 1、自动:拍下后,点击(下载)链接即可下载;2、手动:拍下后,联系卖家发放即可或者联系官方找开发者发货。
查看详情
  • 1、源码默认交易周期:手动发货商品为1-3天,并且用户付款金额将会进入平台担保直到交易完成或者3-7天即可发放,如遇纠纷无限期延长收款金额直至纠纷解决或者退款!;
查看详情
  • 1、描述:源码描述(含标题)与实际源码不一致的(例:货不对板); 2、演示:有演示站时,与实际源码小于95%一致的(但描述中有”不保证完全一样、有变化的可能性”类似显著声明的除外); 3、发货:不发货可无理由退款; 4、安装:免费提供安装服务的源码但卖家不履行的; 5、收费:价格虚标,额外收取其他费用的(但描述中有显著声明或双方交易前有商定的除外); 6、其他:如质量方面的硬性常规问题BUG等。 注:经核实符合上述任一,均支持退款,但卖家予以积极解决问题则除外。
查看详情
  • 1、左子会对双方交易的过程及交易商品的快照进行永久存档,以确保交易的真实、有效、安全! 2、左子无法对如“永久包更新”、“永久技术支持”等类似交易之后的商家承诺做担保,请买家自行鉴别; 3、在源码同时有网站演示与图片演示,且站演与图演不一致时,默认按图演作为纠纷评判依据(特别声明或有商定除外); 4、在没有”无任何正当退款依据”的前提下,商品写有”一旦售出,概不支持退款”等类似的声明,视为无效声明; 5、在未拍下前,双方在QQ上所商定的交易内容,亦可成为纠纷评判依据(商定与描述冲突时,商定为准); 6、因聊天记录可作为纠纷评判依据,故双方联系时,只与对方在左子上所留的QQ、手机号沟通,以防对方不承认自我承诺。 7、虽然交易产生纠纷的几率很小,但一定要保留如聊天记录、手机短信等这样的重要信息,以防产生纠纷时便于左子介入快速处理。
查看详情

相关文章

猜你喜欢
发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务