gpt4 book ai didi

perl - 使用 sed/perl/awk 替换第一次出现的匹配文本

转载 作者:行者123 更新时间:2023-12-03 11:31:18 24 4
gpt4 key购买 nike

我试图匹配一行中第一次出现的文本并使用 sed 将其删除。但是我开始知道 sed 是贪婪的,它不适用于我的情况,现在我正在尝试使用 Perl 实现相同的功能,但它不起作用。

cat test.txt
IAM*WRITNG*THIS*TEXT*FOR*SAMPLE*NUMBER*123*345.05*678987*TEST*OF*DATA*WITH*SOME*DUMMY*TEXT*TO*CHECK*WHETHER*IT*WILL*WORK*TEXT*REPEATING

预期输出:

IAM*WRITNG*THIS*TO*CHECK*WHETHER*IT*WILL*WORK*TEXT*REPEATING

使用 SED:

sed -e 's/\(TEXT\*.*\*.*\*.*\*.*\*.*\*678987\).*\(TEXT\*\)/\2/' test.txt

输出:

IAM*WRITNG*THIS*TEXT*REPEATING

使用 Perl:

perl -pe 's/\(TEXT\*.*\*.*\*.*\*.*\*.*\*678987\).*?\(TEXT\*\)/\2/' test.txt

输出:

IAM*WRITNG*THIS*TEXT*FOR*SAMPLE*NUMBER*123*345.05*678987*TEST*OF*DATA*WITH*SOME*DUMMY*TEXT*TO*CHECK*WHETHER*IT*WILL*WORK*TEXT*REPEATING

有人可以告诉我我做错了什么吗?

更新:我尝试使用为 Perl 命令提供的解决方案,但它不适用于更长的行。有没有办法使用 awk 来做到这一点?

最佳答案

与 sed 不同,在 Perl 中对模式进行分组只需要一对括号,而不是通过反斜杠转义的括号:

perl -pe 's/(TEXT\*.*\*.*\*.*\*.*\*.*\*678987).*?(TEXT\*)/$2/' test.txt

关于perl - 使用 sed/perl/awk 替换第一次出现的匹配文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59673543/

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