带有几行包含“#”和特定文本的正则表达式
Posted
技术标签:
【中文标题】带有几行包含“#”和特定文本的正则表达式【英文标题】:Regex with a few lines containing "#" and a specific text 【发布时间】:2021-08-10 07:28:49 【问题描述】:我们正在尝试更新多服务器配置文件,在特定行之前使用特定位置的新条目。示例包含部分配置文件
#
#
#
#
# The lines below should not be replaced in this file
# Contact Sysadmins before make changes to this line
我需要将包括“#”和换行符在内的这些行与上述行匹配,然后在这些行上方添加新条目,例如
New entry 1
New entry 2
#
#
#
#
# The lines below should not be replaced in this file
# Contact Sysadmins before make changes to this line
在perl中尝试了这个作为内联代码,如下
/usr/bin/perl -lne 'print "\nNew entry 1\nNew entry 2" if (/[#\n]*# The lines below should not be replaced in this file/); print $_' filename
我的正则表达式不起作用。我不是任何其他语言的 perl 或正则表达式专家。在许多服务器上,而不是 4 个“#”可能有 2 个或 3 个,在该行之前。任何帮助将不胜感激。我必须在 2000 多台服务器上更新同一个文件。
【问题讨论】:
欢迎来到 SO。在您的if
子句中是一个正则表达式。如果匹配,该块将被执行。您的数据没有变化。然后一个if
需要在珍珠中总是一个块
!
@Andy A. 不,EXPR if COND_EXPR;
是完全有效的 Perl 语句。和if (COND_EXPR) EXPR;
基本一样。
@ikegami。哦,你是对的,当然!!
【参考方案1】:
您一次处理一行文件,因此[#\n]*#
将永远匹配除#
之外的任何内容。
一种解决方案是告诉 Perl 将整个文件视为一行,从而将整个文件读入内存。
perl -0777pe's/^([#\n]*# The lines below)/New entry 1\nNew entry 2\n$1/mg'
另一个将涉及推迟以#
开头的行的打印。
perl -ne'
$buf .= $_;
next if /^#$/;
print "New entry 1\nNew entry 2\n" if /^# The lines below/;
print $buf;
$buf = "";
END print $buf;
'
测试:
$ perl -0777pe's/^([#\n]*# The lines below)/New entry 1\nNew entry 2\n$1/mg' file
New entry 1
New entry 2
#
#
#
#
# The lines below should not be replaced in this file
# Contact Sysadmins before make changes to this line
$ perl -ne'
$buf .= $_;
next if /^#$/;
print "New entry 1\nNew entry 2\n" if /^# The lines below/;
print $buf;
$buf = "";
END print $buf;
' file
New entry 1
New entry 2
#
#
#
#
# The lines below should not be replaced in this file
# Contact Sysadmins before make changes to this line
(也执行其他测试。)
【讨论】:
感谢您的建议,但建议的 perl 内联都不能完全按照我的需要工作。第一个给出的输出与我需要的非常相似,例如 # # # New entry 1 New entry 2 # 下面的行不应在此文件中替换 我修复了第一个错误,但第二个完全按照问题提出的问题。 (现在,第一个也是)。如果这不是您需要,请解决您的问题并告诉我。【参考方案2】:您可以使用 sed 命令替换 #lines 开始位置之前的新条目行。
sed '/#/s/^/New Entry 1\n/' input.txt
【讨论】:
以上是关于带有几行包含“#”和特定文本的正则表达式的主要内容,如果未能解决你的问题,请参考以下文章
XCode Magical Record, MR_findByAttribute - 查找带有特定单词的字符串(正则表达式?)