Regex 如何从终端中的文件运行perl正则表达式列表

Regex 如何从终端中的文件运行perl正则表达式列表,regex,macos,perl,terminal,Regex,Macos,Perl,Terminal,我对整个编码游戏还不太熟悉,非常感谢每一个答案 我在一个目录下工作,目录中有许多.txt文件,并且有一个包含大量正则表达式的文件,比如“perl-p-I-e的/\n\n/\n/g'*.xml”如果我将它们复制到终端,它们都可以工作。但是有可能直接从文件中运行它们吗? 我尝试了/unicode.sh,但结果是: 没有这样的文件或目录 有什么想法吗 非常感谢你 如果您没有这样的文件或目录,您的问题很可能是您忘记将unicode.sh设置为可执行文件,如chmod+xunicode.sh,假设这是您编

我对整个编码游戏还不太熟悉,非常感谢每一个答案

我在一个目录下工作,目录中有许多
.txt
文件,并且有一个包含大量正则表达式的文件,比如
“perl-p-I-e的/\n\n/\n/g'*.xml”
如果我将它们复制到终端,它们都可以工作。但是有可能直接从文件中运行它们吗? 我尝试了
/unicode.sh
,但结果是:

没有这样的文件或目录

有什么想法吗


非常感谢你

如果您没有这样的文件或目录,您的问题很可能是您忘记将
unicode.sh
设置为可执行文件,如
chmod+xunicode.sh
,假设这是您编写的脚本

当然,运行多个perl命令的正常方式是这样的,它看起来像您编写的
runme.pl
,即perl脚本

也就是说,是的,一切都将从终端开始工作,您只需要小心避开
bash
执行的操作。

这里有一个(大部分)与oneliner
Perl-p-i-e's/\n\n/\n/g'*.xml相当的Perl脚本(一个主要区别是它已经启用,这是强烈建议的),您可以通过在
while
循环的主体中添加更多代码来修改当前行,从而对其进行扩展

#!/usr/bin/env perl
use warnings;
use strict;

if (!@ARGV) {               # if no files on command line
    @ARGV = glob('*.xml');  # get a default list of files
}
local $^I = '';             # enable inplace editing (like perl -i)
while (<>) {                # read each line of each file into $_
    s/\n\n/\n/g;            # modify $_ with a regex
    # more regexes here...
    print;                  # write the line $_ back out
}
#/usr/bin/env perl
使用警告;
严格使用;
if(!@ARGV){#if命令行上没有文件
@ARGV=glob('*.xml');#获取文件的默认列表
}
本地$^I=''启用就地编辑(如perl-i)
while(){#将每个文件的每一行读入$_
s/\n\n/\n/g;#使用正则表达式修改$u
#这里有更多正则表达式。。。
打印;#将行$#写回
}
您可以将此脚本保存在一个文件中,例如
process.pl
,然后使用
perl process.pl
运行它,或者执行
chmod u+x process.pl
,然后通过
/process.pl
运行它

另一方面,实际上,有很多Perl模块可以进行XML处理——我还写了一些。另外,在您展示的示例中,
s/\n\n/\n/g
实际上不会有任何效果,因为当逐行读取文件时,任何字符串都不会包含两个
\n
(您可以更改Perl读取文件的方式,但我看不到在问题中提到这一点)


编辑:您已经在示例中为脚本命名了
unicode.sh
——如果您正在处理unicode文件,那么Perl具有非常强大的功能来帮助您完成这项工作,尽管代码不一定会像我上面所展示的那样漂亮和简短。您必须告诉我们更多关于您正在做的事情,并展示一些示例输入和输出,以获得关于这方面的建议。另请参见,例如…

谢谢Dean!我猜是初学者的错误:/之后,我得到了“env:bash\r:No-this file或directory”,但可以用sed$轻松地将其清除掉,现在它运行得很顺利,而我正试图找出我最终是如何得到的\r$/。。。再次感谢您的快速帮助!没有理由不起作用,正如你所说,sed在这里是一个更好的选择。您需要设置bash shell/usr/bin/bash或同等文件谢谢。我有巨大的文本文件(总共约20GB),其中包含符号和一些表情符号。我现在用一个数字来替换那些符号和表情(大约2000个),例如@somanyquestions。好吧,你可以分享你的代码(一个带有示例输入和输出的代表),你可能会得到一些关于优化的提示。请注意,如果您只是用代码替换Unicode字符,并且使用正确的编码层打开了文件,那么您就不需要表,例如:
s/(\P{ASCII})/sprintf(“%02X”,ord$1)/eg
(但是如果这是XML,那么我仍然会非常小心,正如我在回答中提到的那样)。