gpt4 book ai didi

linux - Perl命令行多行替换

转载 作者:IT王子 更新时间:2023-10-29 00:22:32 30 4
gpt4 key购买 nike

我正在尝试使用命令行 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\][^\^]+)/\1\nsometext/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 for Perl 中尝试了 Regex,它匹配文本文件中的所有内容,但由于某种原因,它无法在命令行上使用 perl。

我会很感激一些帮助。

提前致谢。

最佳答案

您正在逐行阅读文件,因此只有第一行与您的正则表达式匹配。你要做的——如果你真的想删除大部分内容——是使用 -0 选项删除文件,例如-0777。这是行结束处理,777 只是一个按照约定作为八进制数使用的数字,它足够大以致于导致文件 slurping。

perl -0777 -i -pe 's/(\[mysqld\][^\^]+)/$1\nsometext/g' test.txt

另外,我替换了你的引号。如果你在 *nix 中,看起来你是,单引号是更可取的。例如,$1 不会被 shell 插入。

关于linux - Perl命令行多行替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9670426/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com