perl grep(perl 判断数组里面是否含有某个元素)

本文目录
- perl 判断数组里面是否含有某个元素
- 如何利用perl命令行, 来执行正则表达式,寻找匹配的行
- perl如何判断一个变量已经包含在一个数组中
- 提取文本中两匹配行间内容(非贪婪)使用awk,sed,grep或perl
- Perl单行(Perl One-Liners)命令
- perl 日期合法检查
perl 判断数组里面是否含有某个元素
用 grep
$target = "def";
print "Found $target" if ( grep ($target , @x) ) ; #Found def
如何利用perl命令行, 来执行正则表达式,寻找匹配的行
楼上的是找出其中之一呀,楼主要的是同时包含两个句子。
可以这样
perl -n -e ’print if ($_ =~/Barney/ && $_ =~ /Fred/)’ test.txt 》new.txt
其实这样的实现用awk命令这些很好用。楼主可以学习学习awk sed grep 等命令。
我补充个实例吧。
awk ’{if (/Barney/ && /Fred/) print }’ test.txt 》 new.txt
more test.txt | grep Barney | grep Fred 》new.txt (这个管道用着很有意思)
都测试了一下,可行
perl如何判断一个变量已经包含在一个数组中
可以试一下这几种方式,每种方式各有优劣:
#!/bin/perl -w
use strict;
my @arr = ( "aaa","bbb","ccc","ddd","eee","fff"); # 这个是数组
my $vv = "ddd"; # 这个是要查找的变量
# 方法1,:使用类似c语言的风格,遍历这个数组,查找变量是否匹配。
foreach ( @arr)
{
if( $vv eq $_ )
{
print "$vv\n"
}
}
#方法2:使用map,查找数组中是否含有该变量
map { if($vv eq $_) { print "$vv\n"} } @arr;
#方法3:使用grep,查找数组中是否含有该变量
print( grep /^$vv$/, @arr );
以上3中方式的编码均已经测试过了,能够得到正确答案。如果LZ初学,可以使用方法1中的类似C语言的循环风格 ……
提取文本中两匹配行间内容(非贪婪)使用awk,sed,grep或perl
shell很方便
start=0
while read line
do
if ;then
start=1
continue
fi
if ;then
start=0
continue
fi
if ;then
echo $line
fi
done《file
Perl单行(Perl One-Liners)命令
个人博客原文地址
常用 perl -F, -alne :自动以,为分割符号,保存到数组@F中,循环读取每行并去除末位\n符号。
对每行文件加空行:
去除空行:
仅对非空行计数,并显示行号:
输出 匹配到pattern的行,并显示行号:
输出匹配到pattern行的下面的一行:
输出匹配到/AAA/和/BBB/的行:
输出第13行、或除了第13行;输出第13、19、50行;输出13~40行
输出START和END之间的行if/unless:
仅输出奇数行、偶数行:
仅输出文件中重复的行 :
去重复行,仅输出第一次出现的行 :
输出第一列数字相加之和:
输出时间:
输出从5~15当中的10个随机数字
输出a到zz所有字母(..的使用)
输出指定长度的字符(x为重复)
输出从1~100的质数(grep用法)
自动转换大小写字符 \u \L
去除每行开头、结尾的空格内容 s///g
反向输出 数组的内容
批量根据id提取序列
FastQ文件转为FastaA文件
perl 日期合法检查
#!usr/bin/perl
use strict;
my $datachar;
if(!defined($ARGV))
{
$datachar = "20110229";
#print "$datachar\n";
}
else{
$datachar = $ARGV;
#print "$datachar\n";
}
my $_=$datachar;
my $count =s/(-)/$1/ig, "\n";# i是不区分大小写 g是替换全部,统计字符串-字符的个数
my $position1 = index($datachar,"-",1);#4
my $position2 = index($datachar,"-",5);#7
my $len=length($datachar);
my @data;
my $year;
my $month;
my $day;
my @m=(’01’,’02’,’03’,’04’,’05’,’06’,’07’,’08’,’09’,’10’,’11’,’12’);
my @m1=(’01’,’03’,’05’,’07’,’08’,’10’,’12’);
my @m2=(’04’,’06’,’09’,’11’);
my @m3=(’02’);
#print "$len";
if($datachar =~/-/ and $len == 10 and $count == 2 and $position1 == 4 and $position2 == 7)
{ if ($datachar =~ m//) #判断字符包含非数字但-字符除外
{print "10个字符的日期值不正确";
exit;} else {
#print "1\n";
@data=split(/-/,$datachar);
$year =$data;
$month=$data;
$day =$data;
#print "$year\n";
}
}elsif($datachar !~/-/ and $len == 8)
{ if ($datachar =~ m//) #判断字符是否包含非数字字符
{print "8个字符的日期值不正确\n";
exit;} else {
#print "2\n";
$year =substr($datachar,0,4);
$month=substr($datachar,4,2);
$day =substr($datachar,6,2);
#print "$year\n";
#print "$month\n";
#print "$day\n";
}
}else {
print "$datachar 日期值不正确";
exit;
}
if (grep ({$month == $_ } @m))#判断值是否在数组中
{
#print "月份值正确";
}else {
print "月份值不正确\n";
exit;
}
if (grep ({$month == $_ } @m1) and ($day 》’31’ or $day《’01’))
{
print "大月份天值不正确\n";
exit;
}elsif (grep ({$month == $_ } @m2) and ($day 》’30’ or $day《’01’))
{
print "小月份天值不正确\n";
exit;
}elsif (grep ({$month == $_ } @m3) and (($year%4 == 0 and $year%100 != 0) or $year%400 == 0) and ($day》’29’ or $day《’01’))
{
print "闰年2月份的天数值不正确\n";
exit;
}
elsif (grep ({$month == $_ } @m3) and ($day》’28’ or $day《’01’))
{
print "平年2月份的天数值不正确\n";
exit;
}else
{
print "$datachar is right.\n";
}
windows系统,保存脚本名a.pl,若不输入参数,默认值是20110229,运行a.pl。也可以输入一个参数运行,a.pl 2015101。如果你想批量检查文本文件中的参数,相信楼主的能力可以加上一个循环。

更多文章:
在from子句中可以出现(如何在from 子句中嵌套查询下面的语句在access中出错!)
2026年10月11日 05:20
countif函数统计个数怎么用(countif函数怎么用 详解Excel中countif函数的使用方法)
2026年10月11日 03:30
正则匹配数字之前的字符(正则表达式如何匹配前面是数字、中间是“/”、后面也是数字,就像2/3专业的模式)
2026年10月11日 03:00
orlnsertbootmediinselected(我电脑开机显示这个是什么意思or insert boot media in select)
2026年10月10日 23:00
display的用法(display是什么意思 详解display的含义和用法)
2026年10月10日 22:00
html全部居中代码(怎么让网页居中显示,html如何让网页居中)
2026年10月10日 21:10





