regex - 读取文件并获取 perl 中特定单词之后的所有单词
问题描述
这个问题可能看起来有点简单,但我是正则表达式的新手。我正在编写一个脚本,试图读取以下两个文件 "file1" "file2" ,在 --keep 之后获取单词名称意味着我想要获取单词 Machine_Test.2019.01 并执行类似读取 /tmp/Machine_Test.2019.01 之类的文件的操作文件并检查文件状态。之后,我想检查 --keep 之后的第二个单词,即 Machine_Train.2019.02,并在完成 file1 和 file2 中的所有单词后执行相同操作。
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 with following 之后得到这个词。
$input =~ /\--keep\s+(\w+)/
或者有什么方法可以在不逐行读取文件的情况下获取文件中的单词,我该怎么做才能获取 --- 保留在 file1 和 file2 之后的所有名称?任何帮助将非常感激。
解决方案
尝试这样的事情
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
$
推荐阅读
- javascript - 量角器,如果其他类具有相同的类名,如何获取元素
- android - 图层列表 - 边距底部
- python-2.x - 当我从用户那里获取输入并想要转换该输入时,系统错误
- java - 为什么 Java 中的 contains() 方法不能按预期工作?
- javascript - ReferenceError:未定义 twitterFetcher
- reporting-services - 无法加载文件或程序集 | 报表生成器 3.0
- php - jQuery Ajax 获取 json 返回结果
- java - java中的xslt转换期间属性名称使用了非法值
- hazelcast - Hazelcast localKeySet
- asp.net - 通过 post 正确接收嵌套对象