解析文本文件

Joe*_*ips 6 windows text-editing notepad++ regex

我今晚遇到了一个情况,我想解析一个文本文件。我有一个非常非常长的单词列表,其中包含由行分隔的英语单词。我想删除超过 7 个字符的每个单词(或行)。这在 Linux 中很简单,但我似乎无法在 Windows XP 中找到简单的解决方案。我尝试使用 Notepad++ 正则表达式搜索,但这是一个巨大的失败。我尝试使用该表达式.{6,}而没有找到任何匹配项。我真的很茫然,因为我认为这种事情会非常容易,而且会有很多工具来完成这样的任务。似乎 Notepad++ 支持世界上所有其他功能,除了看起来最明显的非常基本的功能。

我的另一个目标是在每一行的单词前后放置一些代码。

aardvark
apple
azolio
Run Code Online (Sandbox Code Playgroud)

会变成

INSERT INTO Words (word) VALUES ('aardvark');
INSERT INTO Words (word) VALUES ('apple');
INSERT INTO Words (word) VALUES ('azolio');
Run Code Online (Sandbox Code Playgroud)

要在 Windows XP 中完成与此类似的任务,您有哪些建议/工具/技巧?

bob*_*mcr 10

要添加 SQL 文本,您可以尝试使用此命令提示符一行:

(for /f %i in (words.txt) do @echo INSERT INTO Words ^(word^) VALUES ^('%i'^)) > words.sql

要过滤掉文本文件中超过 7 个字符的行,您可以使用另一个命令行工具 findstr:

findstr /v /r ^.........*$ words.txt > shorter-words.txt

/r 选项指定您要使用正则表达式匹配,/v 选项告诉它打印不匹配的行。(由于 findstr 似乎不允许您指定字符计数范围,因此我使用“8 或更多”模式和“不匹配”选项伪造了它。)


Joh*_*n T 6

Perl 肯定,只需粘贴此脚本并在与 wordlist 相同的目录中运行它。将您的单词列表名称更改为 words.txt 或更改脚本中的名称。您可以将输出重定向到一个新文件,如下所示:

words.pl > list.txt
Run Code Online (Sandbox Code Playgroud)

没有进一步的用处(快速搅拌,可以切碎一点):

open FILE, "words.txt" or die $!;

my @words = <FILE>;

foreach $word(@words)
{
    print $word if(length($word) <= 8);
}
Run Code Online (Sandbox Code Playgroud)