gpt4 book ai didi

linux - 如何仅从文件中删除最后一个单词

转载 作者:太空宇宙 更新时间:2023-11-04 10:34:34 28 4
gpt4 key购买 nike

我创建了以下 Perl 单行代码以从文件中删除单词

此 Perl 还对特殊字符进行转义,例如 @$*,因此每个包含特殊字符的单词都将从文件。

如何更改 Perl 语法以便仅从文件中删除最后一个匹配的单词而不是所有单词?

例子

 more file

Kuku
Toto
Kuku
kuku
export REPLACE_NAME="Kuku"
export REPLACE_WITH=""
perl -i -pe 'next if /^#/; s/(^|\s)\Q$ENV{REPLACE_NAME }\E(\s|$)/$1$ENV{ REPLACE_WITH }$2/' file

预期结果

 more file
Kuku
Toto
Kuku

另一个例子

当 - export REPLACE_NAME="mark@$!"

more file

mark@$!
hgst#@
hhfdd@@

预期结果

hgst#@
hhfdd@@

最佳答案

使用Tie::File使这更容易。

$ perl -MTie::File -E'tie @file, "Tie::File", shift or die $!; $file[-1] =~ s/\b\Q$ENV{REPLACE_NAME}\E\b/$ENV{REPLACE_WITH}/' file

更新:重写为程序以对其进行解释。

# Load the Tie::File module
use Tie::File;

# Tie::File allows you to create a link between an array and a file,
# so that any changes you make to the array are reflected in file.
# The "tie()" function connects the file (passed as an argument and
# therefore accessible using shift()) to a new array (called @file).
tie my @file, 'Tie::File', shift
or die $!;

# The last line of the file will be in $file[-1].
# We use s/.../.../ to make a substitution on that line.
$file[-1] =~ s/\b\Q$ENV{REPLACE_NAME}\E\b/$ENV{REPLACE_WITH}/;

更新:现在您已经更改了您的需求规范。您想要删除最后一次出现的字符串,它不一定在文件的最后一行。

老实说,我认为您已经完成了我在命令行开关中编写的那种任务。它会编写一个单独的程序,看起来像这样:

#!/usr/bin/perl

use strict;
use warnings;

use Tie::File;

tie my @file, 'Tie::File', shift
or die $!;

foreach (reverse @file) {
if (s/\b\Q$ENV{REPLACE_NAME}\E\b/$ENV{REPLACE_WITH}/) {
last;
}
}

关于linux - 如何仅从文件中删除最后一个单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38246818/

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