Perl 命令行多行替换
- 2024-10-23 08:47:00
- admin 原创
- 82
问题描述:
我正在尝试使用命令行 perl 替换多行文件中的文本。我正在使用 Ubuntu Natty。
以下是我的文本文件(名为 test.txt)的内容:
[mysqld]
#
# * Basic Settings
#
#
# * IMPORTANT
# If you make changes to these settings and your system uses apparmor, you may
# also need to also adjust /etc/apparmor.d/usr.sbin.mysqld.
#
user = mysql
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
skip-external-locking
下面是我的 perl 命令:
perl -i -pe "s/([mysqld][^^]+)/
sometext/g" test.txt
但是,我并没有替换文件中的所有文本,而是得到了以下结果:
[mysqld]
sometext#
# * Basic Settings
#
#
# * IMPORTANT
# If you make changes to these settings and your system uses apparmor, you may
# also need to also adjust /etc/apparmor.d/usr.sbin.mysqld.
#
user = mysql
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
skip-external-locking
#
我尝试了 RegexBuddy 中用于 Perl 的 Regex,它与文本文件中的所有内容匹配,但由于某种原因,它无法在命令行上使用 perl 工作。
我将非常感激您的帮助。
提前致谢。
解决方案 1:
您正在逐行读取文件,因此只有第一行与您的正则表达式匹配。如果您确实希望删除大部分内容,您需要做的是使用选项-0
(例如)来读取文件-0777
。这是行尾处理,777
只是一个按惯例用作八进制数的数字,该数字足够大以导致文件读取。
perl -0777 -i -pe 's/([mysqld][^^]+)/$1
sometext/g' test.txt
另外,我替换了您的引号。如果您使用的是 *nix(看起来您是这样的),最好使用单引号。例如,$1
不会被 shell 插入。
解决方案 2:
该-p
开关使 Perl 迭代输入的每一行,并对每一行执行给定的代码(然后打印这些行)。具体来说,命令
perl -p -e 'SOME_CODE_HERE;'
与运行以下 Perl 程序完全等效:
LINE: while (<>) {
SOME_CODE_HERE;
} continue {
print or die "-p destination: $!
";
}
您的正则表达式似乎旨在一次匹配多行,如果 Perl 逐行处理输入,这显然行不通。要使其按预期工作,您至少有两个选择:
使用开关改变 Perl 对行构成的理解。具体来说,该开关使 Perl 将每个输入文件视为单个“行”。
-0NNN
`-0777`重写您的代码,例如使用
..
触发器运算符。
顺便说一句,我强烈怀疑你的正则表达式的意思和你想象的不一样。特别是,[^^]+
匹配一个或多个不包含插入符号 ( ) 的字符串^
。由于你的输入似乎不太可能包含任何插入符号,因此这似乎本质上等同于(?s:.+)
(或者只是.+
如果你使用/s
修饰符)。
相关推荐
热门文章
项目管理软件有哪些?
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件
热门标签
云禅道AD