这个问题似乎有点容易,但是我是regex的新手。我正在编写一个脚本以尝试读取以下两个文件“ file1”“ file2”,在--keep之后获得单词名称,这意味着我想获得单词Machine_Test.2019.01并执行类似读取/tmp/Machine_Test.2019.01这样的文件的操作文件并检查文件状态。之后,我想检查--keep之后的第二个单词,它是Machine_Train.2019.02,并在获取文件1和文件2中的所有单词之后执行相同的操作。
file1和file2内部文件的示例:
#!/bin/csh -f
rsh -n machine1 "( run.py --keep Machine_Test.2019.01 --training 300 )
rsh -n machine2 "( run.py --keep Machine_Train.2019.02 --training 300 )
...
首先想到的是我正在研究一些答案,然后对以下内容进行了小测试:
my $file = " /tmp/file1 "
open(FI,$file) or die("Could not open file.");
foreach my $line (<FI>) {
if ( my $input =~ /\--keep\s+(\w+)/ ){
my $found = $1;
open another file maybe /tmp/$found
and do something...
} else {
printf("no more find\n");
}
}
close(FI);
有人可以告诉我以下内容的正则表达式有什么问题吗,我尝试过是否设置自己的字符串,并且可以在--keep之后加上以下内容。
$input =~ /\--keep\s+(\w+)/
或者有什么方法可以在不逐行读取的情况下获取文件中的单词,我该怎么做才能获取---保留在file1和file2之后的所有名称?任何帮助将不胜感激。
答案 0 :(得分:2)
尝试这样的事情
perl -lne ' /--keep\s+(\S+)/ and print "cat /tmp/$1" '
具有给定的输入
$ cat owen.txt
#!/bin/csh -f
rsh -n machine1 "( run.py --keep Machine_Test.2019.01 --training 300 )
rsh -n machine2 "( run.py --keep Machine_Train.2019.02 --training 300 )
$ perl -lne ' /--keep\s+(\S+)/ and print "cat /tmp/$1" ' owen.txt
cat /tmp/Machine_Test.2019.01
cat /tmp/Machine_Train.2019.02
$
假设您有类似内容
$ cat /tmp/Machine_Test.2019.01
ABC
$ cat /tmp/Machine_Train.2019.02
XYZ
$
然后输入命令
$ perl -lne ' if ( /--keep\s+(\S+)/ ) { $x=qx(cat /tmp/$1); print "$x" } ' owen.txt
ABC
XYZ
$
答案 1 :(得分:0)