我在Perl one liner中有以下替换:
perl -pi.bak -e 's/(.*?\t.*?\t.*?\t.*?\t.*?\t.*?\t.*?\t.*?\t.*?\t)/$123424977\t/g if $. <= 200'
Run Code Online (Sandbox Code Playgroud)
问题是我想在分组正则表达式捕获的文本之后插入数字23424977 (.*?\t.*?\t.*?\t.*?\t.*?\t.*?\t.*?\t.*?\t.*?\t).
但是Perl认为我指的是团队$ 123424977!如何告诉Perl我想要组$ 1并在此之后插入文本23424977?
我正在尝试自学Perl,我到处寻找可能是一个非常简单的问题的答案.我已经定义了一个子程序,我调用它来计算单词中的字母数.如果我这样写出来:
$sentence="This is a short sentence.";
@words = split(/\s+/, $sentence);
foreach $element (@words) {
$lngths .= length($element) . "\n";
}
print "$lngths\n";
Run Code Online (Sandbox Code Playgroud)
然后它就像一个魅力.但是,如果我将其包装到子例程中,则拆分不会拆分输入,而是将整个句子计为单个输入.这是我如何定义子程序:
sub countWords {
@words = split(/\s+/, @_);
foreach $element(@words) {
$lngths .= length($element) . "\n";
}
return $lngths;
}
Run Code Online (Sandbox Code Playgroud)
从我阅读过的所有页面和我所咨询过的文本中,这应该可行,但事实并非如此.
提前致谢!
如何更改用于突出显示vi中搜索的颜色?现在黄色背景上的白色字母完全难以辨认.我宁愿它只是颠倒颜色方案,即白色背景上的黑色字母或可能在黑色背景上有红色字母.但目前的配色方案无法使用.
我正在尝试在我的开发机器上安装Mysql模块,但它似乎想在安装之前安装本地Mysql.
有工作吗?
我不需要或想要本地安装Mysql,我正在使用安装查询网络机器.
我循环遍历数据库中的表定义并提取DDL,以便能够为软件测试目的创建表"重复"的"黄金数据"集.我有以下代码,它提取DDL就好了一个表,它会抛出一个ORA-06502错误.问题是,我已经定义了DDL作为CLOB返回的变量,它应该足够大.这是代码:
create or replace
procedure gettabledescription as
current_date_time varchar2(32);
sql_statement varchar2(200);
ddl_return clob;
new_ddl clob;
BEGIN
DBMS_OUTPUT.ENABLE;
current_date_time:= to_char(sysdate,'MM/DD/YYYY - HH24:MI:SS');
dbms_output.put_line(current_date_time);
for cursor_rec in (select * from user_objects where object_type='TABLE' and object_name not like 'TM%' and object_name not like 'TZ_%' and object_name not like 'EXT_%' and object_name not like 'RPT_%' and object_name not like 'ETL_%') loop
sql_statement := 'select dbms_metadata.get_ddl(''TABLE'',' || '''' || cursor_rec.object_name || '''' || ') from dual';
execute immediate sql_statement into ddl_return;
**error thrown here** new_ddl …Run Code Online (Sandbox Code Playgroud) 我觉得这很容易,但我很难过.我想将每行放在一个文件中并复制八次.这是我正在使用的代码:
#!/usr/bin/perl
use warnings;
use strict;
use diagnostics;
my $inputFile = "Providers list.csv";
my $outputFile = "Providers list2.csv";
open my $FHI, '<', $inputFile || die "cannot open input file";
open my $FHO, '>', $outputFile || die "cannot open output file";
while (<$FHI>) {
for ( my $i = 0; $i < 8; $i++) {
print $FHO "$_\r";
}
}
close $inputFile;
close $outputFile;
Run Code Online (Sandbox Code Playgroud)
发生了什么,而不是每一行重复8次,重复整个文件内容八次.换句话说,而不是这样:
Line1
Line1
Line1
Line1
Line1
Line1
Line1
Line1
Run Code Online (Sandbox Code Playgroud)
我明白了:
Line1
Line2
Line3
Line1
Line2
Line3
Run Code Online (Sandbox Code Playgroud)
等等,八次.我不明白为什么它不是单独处理每一行. …
我正在尝试从HTML日志文件中获取错误数量.这是我的代码(是的,我知道我正在混合使用bash和perl):
for line in `cat paths.txt`; do grep Failed ${line} | perl -pe 'm/\d+/'; done
Run Code Online (Sandbox Code Playgroud)
我期待得到一个数字列表,例如,
0
1
0
0
0
1
6
Run Code Online (Sandbox Code Playgroud)
但相反,我得到包含错误的整行,例如,
Run Code Online (Sandbox Code Playgroud)Total Failed: <strong>0</strong> Total Failed: <strong>1</strong> Total Failed: <strong>0</strong> Total Failed: <strong>0</strong> Total Failed: <strong>0</strong> Total Failed: <strong>1</strong> Total Failed: <strong>6</strong>
我在看什么?
我试图去除XML文件中位于标签<KEYS>和</ KEYS>之间的所有行.
作为问题的第一步,我得到了一个正则表达式,它将匹配文件中的第一个键块,但它不会继续匹配文件中的其他块.我已经尝试在正则表达式中添加"/ g"并且我尝试了"-0777"来立刻淹没整个文件,这两种技巧都没有任何区别.下面是perl one liner:
perl -00 -ne 'print $1 if /(\s+\<KEYS\>\n\s+.*?\n\s+\<\/KEYS\>)/s' someFile.xml
Run Code Online (Sandbox Code Playgroud)
我得到这个输出:
Run Code Online (Sandbox Code Playgroud)<KEYS> <KEY name="cone_id" type="long" nativeType="number(17)"/> <KEY name="bar_id" type="long" nativeType="number(32)"/> <KEY name="foo_type" type="int" nativeType="number(3)"/> </KEYS>
如上所述,文件中有更多的块(长度接近五千行),但perl代码并没有弄乱任何其他块.
有什么建议?
我有一个 Python 脚本,需要发出许多 shell 命令。我认为我可以创建一个子进程对象,然后在每次执行命令时重用它。
这就是我设置代码的方式:
def setupPipeline(self):
setupShell = subprocess.Popen([''], stdout=subprocess.PIPE, shell=True, stderr=subprocess.PIPE, stdin=subprocess.PIPE)
# Stop running pipeline
setupShell.stdin.write('stop ' + self.Name)
output = setupShell.stdout.read()
print output
# Cancel any running jobs and cleanup variables
setupShell.stdin.write('sudo -u pr cancel ALL')
output = setupShell.stdout.read()
print output
setupShell.stdin.write('sudo -u pr clean ALL')
output = setupShell.stdout.read()
print output
Run Code Online (Sandbox Code Playgroud)
(这里跳过很多其他代码)
if __name__ == '__main__':
#self-test code
pipelineObj = Pipeline(sys.argv)
pipelineObj.setupPipeline()
Run Code Online (Sandbox Code Playgroud)
但是,当代码到达第二个命令时,我得到一个
IOError: [Errno 32] Broken pipe
Run Code Online (Sandbox Code Playgroud)
如何重用子进程对象来发出需要在同一 shell 中执行的命令?这些命令不能简单地链接在一起,因为每次调用之间都会进行处理。
我正在尝试在Perl中创建一个简单的递归阶乘函数,它将从命令行中获取一个数字,然后返回它的阶乘,例如
>./factorial.pl 3
>6
Run Code Online (Sandbox Code Playgroud)
我的子程序似乎没有采用命令行参数.但是,如果我在没有子包装器的情况下使用完全相同的代码,它会采用命令行参数,但显然不能用作子例程.以下是代码:
#!/usr/bin/perl
use strict;
use warnings;
use diagnostics;
sub fact() {
my $number = shift or return;
return 0 if $number < 0;
my $results = 1;
while ($number--) { $results *= $number--};
return $results;
}
Run Code Online (Sandbox Code Playgroud) 好的,我是从Perl转到Python而且我没有太多的Python经验,所以对于那些对Python更有经验的人来说,这似乎相当明显.
无论如何,我只是加载配置文件然后,作为自检,打印加载的值.代码如下:
#!/home/y/bin/python2.7
import logging
import sys
import datetime
import yaml
def main(self):
#initialize the logger
logger = logging.getLogger(self.granularity)
log_fh = logging.FileHandler(filename='/home/logs/pipelineTest/pipelineTest' + datetime.datetime.now().strftime('%Y%m%d_%H%M') + '.log', mode='w')
logger.addHandler(log_fh)
logger.setLevel(logging.INFO)
formatter = logging.Formatter('%(asctime)-6s: %(name)s - %(levelname)s - %(message)s')
log_fh.setFormatter(formatter)
#read configuration file
if sys.argv[1]:
ymlFH = open(sys.argv[1])
else:
ymFH = open('/home/conf/pipelineTest/runPipeline.yml')
confDict = yaml.load(ymlFH)
if __name__ == '__main__':
#self-test code
for key, value in confDict.iteritems():
print 'Key is: ' + key + '\n'
print 'value is: ' + confDict[key] + '\n' …Run Code Online (Sandbox Code Playgroud)