awk
中的next
命令将:
停止处理当前的输入记录。读取下一个输入记录,并开始处理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循环无法到达。
3条答案
按热度按时间rvpgvaaj1#
作为一个一行程序,我会做什么:
nhaq1z212#
这将跳过偶数并打印奇数。
ncecgwcz3#
我不是
perl
-忍者,但如果你有工作解决方案在某些语言,并希望转换到另一个,你可能会发现转译器。我设法揭开存在的a2p
,我设法通过做sudo cpanm -S App::a2p
,然后我创建了program.awk
基于您的例子,即作为
gsub
function返回所做的替换数
这将是一样的问 * 是否有任何替换 * 当使用作为模式.注意,它不会 * 打印行与
b
作为GNUAWK
被指示next
行,在它是print
ed.然后我召唤a2p
如下方式program.pl
的含量为我使用
file.txt
测试了它,内容如下通过做
并得到期望输出,即,