1

所以我正在运行这一个班轮:

 perl -i -pe 's|[^\d\n]||g' country-ids.txt

要替换文件中的文本,如下所示:

# encoding: utf-8
files_to_change = ["db_owners.txt", "db_vessels.txt"]
files_to_change.each do |file|
    text = File.read(file)
,"1")
,"1")
,"2")
,"2")
,"3")

我的目标是剥离所有非数字字符的每一行,同时将这些行保留在其原始位置。

我得到的不是我想要的结果:

d
dd
d
d
<blank space>

不知道发生了什么。我保留新行的原因是因为我上次在“查找”字符类中没有换行符的情况下运行它时,我得到的只是一个非常非常长的数字行。

如果有任何区别,我会使用 %x{command} 在 .rb 脚本中运行它。

编辑:

这是整个脚本。仍然遇到同样的问题。不知道为什么。

%x{cut -f 2 -d/ script-substitute-countries-with-id.rb > countries2.txt}
%x{cut -f 2 db_vessels.txt > countries.txt}
%x{cut -f 3 -d/ script-substitute-countries-with-id.rb > country-ids.txt}
%x{perl -i -pe 's:[^\d]::g' country-ids.txt}
%x{join countries2.txt country-ids.txt > countries2.txt.tmp}
%x{mv countries2.txt.tmp countries2.txt}
%x{cat countries.txt countries2.txt > countries.txt}
%x{uniq countries.txt > countries.txt.tmp}
%x{mv countries.txt.tmp countries.txt}
4

1 回答 1

5

Ruby 的%x{}运算符应用了类似双引号的语义,这意味着反斜杠是特殊的。将 perl 代码更改为:(在's|[^\\d\\n]||g'每个位置使用 2 个反斜杠 1)它应该可以工作。

于 2012-10-25T20:46:32.837 回答