gpt4 book ai didi

perl中的正则表达式,匹配换行符和下一行的第一个单词

转载 作者:行者123 更新时间:2023-12-01 09:52:31 26 4
gpt4 key购买 nike

我有一个看起来像的文件

title="title1"  
artist="artist1"
title="title2"
artist="artis2"
title="title3"
artist="artist3"

等等

这个命令
perl -pe 's/title="(.*?)"\n//ig' list.txt

没有像我希望的那样工作。如果我一个人做,我只会得到艺术家的台词,但是如果我这样做

perl -pe 's/title="(.*?)"\nartist//ig' list.txt

根本不匹配。
我尝试过使用和不使用/g 并尝试添加/m我查看了 nano 中的文件,但在每一行的最后一个“”和下一行的“艺术家”之间没有看到任何其他字符。

有人知道我做错了什么吗? (我使用的是 perl 而不是 sed,因为生成此列表的正则表达式使用了否定先行)。

我的目标是能够使用如下一行
perl -pe 's/title="(.*?)"\nartist="(.*?)"(?:\n|$)/\2 -\1/ig' list.txt

那会输出类似的东西

artist1 - title1  
artist2 - title2
artist3 - title3

最佳答案

你的替代

s/title="(.*?)"\n//ig

正在替换任何看起来像 title="xxx" 的行。它正在删除这些行。

不清楚你想要什么,但如果你的要求是删除 title= 和引号,那么你应该使用

perl -pe 's/title="(.*?)"/$1/i' myfile

/g 修饰符是多余的,除非您希望文件中的一行中包含许多标题



更新

如果您想将标题与艺术家配对,那么您确实需要一个脚本文件。这应该做你需要的。数据直接取自你的问题

use strict;
use warnings 'all';
use feature 'say';

my $title;

while ( <DATA> ) {

if ( /title="([^"]*)"/ ) {
$title = $1;
}
elsif ( /artist="([^"]*)"/ ) {
say "$1 - $title";
}
}


__DATA__
title="title1"
artist="artist1"
title="title2"
artist="artis2"
title="title3"
artist="artist3"

输出

artist1 - title1
artis2 - title2
artist3 - title3

关于perl中的正则表达式,匹配换行符和下一行的第一个单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34983282/

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