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
忍者,但如果您有某种语言的工作解决方案并想转换为另一种语言,您可能会找到相应的转译器。我设法揭示了 的存在a2p
,我设法通过这样做得到了它sudo cpanm -S App::a2p
,然后我program.awk
根据你的例子创建了作为
gsub
函数这与询问用作模式时是否进行了任何替换相同。请注意,在编辑之前,它不会按照
b
GNUAWK
指示的那样打印行。然后我按照以下方式召唤next
print
a2p
的内容
program.pl
是我使用
file.txt
以下内容对其进行了测试通过做
并获得预期输出,即
(使用 perl 5、版本 34、subversion 0 进行测试)