我是整个编码游戏的新手,非常感谢每个答案!
我正在其中包含许多.txt
文件的目录中工作,并且有一个包含正则表达式的完整列表的文件,例如"perl -p -i -e 's/\n\n/\n/g' *.xml"
,如果我将它们复制到终端,它们都可以工作。但是有可能直接从文件中运行它们吗?
我尝试了./unicode.sh
,但结果是:
没有这样的文件或目录。
有什么想法吗?
非常感谢您!
答案 0 :(得分:3)
以下是与oneliner perl -p -i -e 's/\n\n/\n/g' *.xml
等效的Perl脚本(主要是等效的)(主要区别是已启用strict
和warnings
,强烈建议使用),您可以对其进行扩展通过添加更多代码来修改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
}
您可以将此脚本保存在process.pl
之类的文件中,然后使用perl process.pl
运行它,或者执行chmod u+x process.pl
然后通过./process.pl
运行它。
另一方面,您确实shouldn't modify XML files with regular expressions,有很多Perl模块可以进行XML处理-我写了更多的here。另外,在您显示的示例中,s/\n\n/\n/g
实际上不会产生任何影响,因为当逐行读取文件时,没有字符串将包含两个\n
(您可以更改Perl的读取方式文件,但我在问题中看不到任何提及。)
编辑:您已在示例unicode.sh
中为脚本命名-如果您正在处理Unicode文件,则Perl具有非常强大的功能来帮助您完成此任务,尽管可以赢得代码最终不一定像我上面显示的那样好看又短。您必须告诉我们更多有关您正在做的事情,并显示一些示例输入和输出,以获取有关此操作的建议。另请参见perlunitut
。
答案 1 :(得分:2)
如果您没有这样的文件或目录,很可能是因为忘记了unicode.sh
的可执行性,就像在chmod +x unicode.sh
中一样,假设这是您编写的脚本。
当然,运行多个perl命令的正常方法是看起来像您编写的runme.pl
,即perl脚本。
也就是说,是的,所有内容都可以在终端上正常工作,您只需要注意转义bash
所执行的操作即可。