AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / coding / 问题 / 77122162
Accepted
xpt
xpt
Asked: 2023-09-17 22:09:12 +0800 CST2023-09-17 22:09:12 +0800 CST 2023-09-17 22:09:12 +0800 CST

如何跳过 perl 中的其余部分作为 awk 中的下一个?

  • 772

next中的命令将awk:

停止处理当前输入记录。读取下一个输入记录并从 AWK 程序中的第一个模式开始处理。到达输入数据末尾后,执行任何 END 规则。

假设我的 perl 脚本是一个转换规则列表,perl 中是否有这样的东西可以模拟它,就像我编码一样:

s/a/A/g;
s/b/B/g; next();
s/c/C/g;

将next?()检查给定的替换是否成功,然后停止处理其余的转换规则,并从转换规则的第一个模式开始。

实现这一目标的最佳方法是什么?

输入示例:

R: waltz
M: 3/4
L: 1/4
K: C
|: E2"C"G | d3"G7" | c2"C"G | F3"F" | E2"C"E | EFG | A3"Dm" | G3"G7" |
| E2"C"G | d3"G7" | c2"C"G | F3"F" | E2"C"G | G"G7"AB | c3"C"- | c3 ||
||d"G7" z/G/ G | BAG | E2"C"G | c3 | A2"F"c | d2"D"c | B3"G" | G3 |
| E2"C"G | d3"G7" | c2"C"G | F3"F" | E2"C"G | G"G7"AB c3"C" | c3 :|

ABC 音符,例如E2 G,d3最后处理/替换(循环while /re/gi),而吉他和弦"C" "Dm" "G7"等首先被替换,然后跳过 ABC 音符替换。我尝试使用next if s/".*?"/^$&/g;来替换吉他和弦部分,但是,我所有的 ABC 音符替换都被跳过,后来的 while 循环无法到达。

perl
  • 3 3 个回答
  • 66 Views

3 个回答

  • Voted
  1. Best Answer
    Gilles Quénot
    2023-09-17T23:52:35+08:002023-09-17T23:52:35+08:00

    作为一句我会做的事情:

    perl -lnE 's/a/A/g; next if s/b/B/g; s/c/C/g; say' file
    
    • 4
  2. Supertech
    2023-09-17T22:28:52+08:002023-09-17T22:28:52+08:00

    这将跳过偶数并打印奇数。

    #!/usr/bin/perl
    use v5.30;
    use warnings;
    
    my @numbers = 1..20;
    
    for my $number (@numbers){
        next if $number % 2 == 0;
        say $number;
    }
    
    • 1
  3. Daweo
    2023-09-17T23:35:09+08:002023-09-17T23:35:09+08:00

    我不是perl忍者,但如果您有某种语言的工作解决方案并想转换为另一种语言,您可能会找到相应的转译器。我设法揭示了 的存在a2p,我设法通过这样做得到了它sudo cpanm -S App::a2p,然后我program.awk根据你的例子创建了

    {gsub(/a/,"A")}
    gsub(/b/,"B"){next}
    {gsub(/c/,"C")}
    {print}
    

    作为gsub函数

    返回所做的替换数

    这与询问用作模式时是否进行了任何替换相同。请注意,在编辑之前,它不会按照bGNUAWK指示的那样打印行。然后我按照以下方式召唤nextprinta2p

    a2p program.awk > program.pl
    

    的内容program.pl是

    #!/usr/bin/perl
    eval 'exec /usr/bin/perl -S $0 ${1+"$@"}'
        if $running_under_some_shell;
                # this emulates #! processing on NIH machines.
                # (remove #! line above if indigestible)
    
    eval '$'.$1.'$2;' while $ARGV[0] =~ /^([A-Za-z_0-9]+=)(.*)/ && shift;
                # process any FOO=bar switches
    
    $, = ' ';       # set output field separator
    $\ = "\n";      # set output record separator
    
    line: while (<>) {
        chomp;  # strip record separator
        s/a/A/g;
        if (s/b/B/g) {
        next line;
        }
        s/c/C/g;
        print $_;
    }
    

    我使用file.txt以下内容对其进行了测试

    aaa
    aab
    aac
    aba
    abb
    abc
    aca
    acb
    acc
    baa
    bab
    bac
    bba
    bbb
    bbc
    bca
    bcb
    bcc
    caa
    cab
    cac
    cba
    cbb
    cbc
    cca
    ccb
    ccc
    

    通过做

    perl program.pl file.txt
    

    并获得预期输出,即

    AAA
    AAC
    ACA
    ACC
    CAA
    CAC
    CCA
    CCC
    

    (使用 perl 5、版本 34、subversion 0 进行测试)

    • 1

相关问题

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    使用 <font color="#xxx"> 突出显示 html 中的代码

    • 2 个回答
  • Marko Smith

    为什么在传递 {} 时重载解析更喜欢 std::nullptr_t 而不是类?

    • 1 个回答
  • Marko Smith

    您可以使用花括号初始化列表作为(默认)模板参数吗?

    • 2 个回答
  • Marko Smith

    为什么列表推导式在内部创建一个函数?

    • 1 个回答
  • Marko Smith

    我正在尝试仅使用海龟随机和数学模块来制作吃豆人游戏

    • 1 个回答
  • Marko Smith

    java.lang.NoSuchMethodError: 'void org.openqa.selenium.remote.http.ClientConfig.<init>(java.net.URI, java.time.Duration, java.time.Duratio

    • 3 个回答
  • Marko Smith

    为什么 'char -> int' 是提升,而 'char -> Short' 是转换(但不是提升)?

    • 4 个回答
  • Marko Smith

    为什么库中不调用全局变量的构造函数?

    • 1 个回答
  • Marko Smith

    std::common_reference_with 在元组上的行为不一致。哪个是对的?

    • 1 个回答
  • Marko Smith

    C++17 中 std::byte 只能按位运算?

    • 1 个回答
  • Martin Hope
    fbrereto 为什么在传递 {} 时重载解析更喜欢 std::nullptr_t 而不是类? 2023-12-21 00:31:04 +0800 CST
  • Martin Hope
    比尔盖子 您可以使用花括号初始化列表作为(默认)模板参数吗? 2023-12-17 10:02:06 +0800 CST
  • Martin Hope
    Amir reza Riahi 为什么列表推导式在内部创建一个函数? 2023-11-16 20:53:19 +0800 CST
  • Martin Hope
    Michael A fmt 格式 %H:%M:%S 不带小数 2023-11-11 01:13:05 +0800 CST
  • Martin Hope
    God I Hate Python C++20 的 std::views::filter 未正确过滤视图 2023-08-27 18:40:35 +0800 CST
  • Martin Hope
    LiDa Cute 为什么 'char -> int' 是提升,而 'char -> Short' 是转换(但不是提升)? 2023-08-24 20:46:59 +0800 CST
  • Martin Hope
    jabaa 为什么库中不调用全局变量的构造函数? 2023-08-18 07:15:20 +0800 CST
  • Martin Hope
    Panagiotis Syskakis std::common_reference_with 在元组上的行为不一致。哪个是对的? 2023-08-17 21:24:06 +0800 CST
  • Martin Hope
    Alex Guteniev 为什么编译器在这里错过矢量化? 2023-08-17 18:58:07 +0800 CST
  • Martin Hope
    wimalopaan C++17 中 std::byte 只能按位运算? 2023-08-17 17:13:58 +0800 CST

热门标签

python javascript c++ c# java typescript sql reactjs html

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve