我正在使用文本,并希望用递增的数字替换#字符。文字如下:
Chap.2。#
Chap.2。#
Chap.2。#
Chap.2。#
我正试着读它:
Chap.2.1
Chap.2.2
Chap.2.3
第2.4章和最多三位数。
我的源文档是Mellel,但我也有Nisus Writer Pro,以及许多其他文本编辑器,如TextMate,Atom,TextWrangler,Brackets,CotEditor,jEdit等。我尝试在应用程序中使用正则表达式使用它的可用性,但无济于事。
我试过搜索# 然后用\ i,或\ 1,或\ 1 \ i或\ 1 \ i替换。
有人可以帮忙吗?我已经在SO和其他网站上阅读了很多其他类似的问题,但我似乎无法使语法正确(加上其他示例并不足以帮助我解决这个问题)。谢谢。
答案 0 :(得分:2)
一种解决方案是使用perl:
perl -pe 'BEGIN { our $i = 1; } s/Chap\.2\.#/"Chap.2.".($i++)/ge;' <chapters.txt;
扩展以处理多个顶级数字,将每个顶级数字的第二级数字从1递增:
perl -pe 'BEGIN { our $h = {}; } s/Chap\.(\d+)\.#/"Chap.$1.".(exists($h->{$1}) ? $h->{$1}++ : ($h->{$1} = 1)++)/ge;' <chapters.txt;
要查找并逐步替换您可以执行的#字符:
perl -pe 'BEGIN { our $i = 1; } s/#/$i++/ge;' <chapters.txt;
答案 1 :(得分:0)
以下是在命令行中使用PHP执行此操作的方法,该文件名为convert.php,该文件将文件名作为参数。注意:没有for-loop:
<?php
if ( count($argv) < 2 ) {
echo "Correct syntax is: convert.php filename.ext\n";
exit;
}
$file = $argv[1];
$contents = file_get_contents( $file );
$nu = preg_replace_callback('/\#/',function($matches){
static $i=1;
return $i++;
},$contents);
echo '<pre>',"\n";
echo $nu;
file_put_contents("bestNumberedChapters.txt",$nu);
因此,使用PHP替换包含&#39;#&#39;的所有章节标题是可行的。具有增量的数值。