perl /^["'].*["']$/g 和 /^["']+["']$/g 区别
时间: 2024-04-06 18:33:00 浏览: 66
这两个正则表达式的区别在于单引号和双引号的匹配方式不同。
第一个正则表达式 `/^["'].*["']$/g`,表示以单引号或双引号开头,以单引号或双引号结尾的字符串。其中,`["']`表示匹配单引号或双引号,`.`表示匹配任意字符(除换行符外),`*`表示匹配前面的字符零次或多次。这个正则表达式可以匹配类似于`"hello"`或`'world'`这样以双引号或单引号包裹的字符串。
第二个正则表达式 `/^["']+["']$/g`,也表示以单引号或双引号开头,以单引号或双引号结尾的字符串。但是,这个正则表达式中的`["']`表示匹配单引号或双引号中的任意一个字符,并且使用了`+`表示匹配前面的字符一次或多次。这个正则表达式可以匹配类似于`"hello"`、`''world''`、`"""hello"""`或`'''''''''''''world'''''''''''''`这样以单引号或双引号包裹的字符串,即允许多个单引号或双引号连续出现。
因此,这两个正则表达式虽然都可以匹配以单引号或双引号开头并以单引号或双引号结尾的字符串,但是第二个正则表达式允许多个单引号或双引号连续出现,而第一个正则表达式不允许。
相关问题
data_dir='/public/work/Personal/wuxu/qiantao_17' for file1 in ${data_dir}/*.fasta; do for file2 in ${data_dir}/*.fasta; do if [ "$file1" != "$file2" ]; then touch snp_indel.end.sh && cat snp_indel.end.sh && \ export PATH=/public/work/Personal/pangshuai/software/conda/miniconda3/bin/:${PATH} && \ nucmer --mum -t 8 -g 1000 -p ${file1##*/}.${file2##*/}.ref_based.nucmer $file1 $file2 && \ delta-filter -1 -l 200 ${file1##*/}.${file2##*/}.ref_based.nucmer.delta > ${file1##*/}.${file2##*/}.ref_based.nucmer.delta.filter && \ dnadiff -d ${file1##*/}.${file2##*/}.ref_based.nucmer.delta.filter -p ${file1##*/}.${file2##*/}.ref_based.nucmer && \ show-coords -rcloT ${file1##*/}.${file2##*/}.ref_based.nucmer.delta.filter > ${file1##*/}.${file2##*/}.ref_based.nucmer.delta.filter.coords && \ show-coords -THrd ${file1##*/}.${file2##*/}.ref_based.nucmer.delta.filter > ${file1##*/}.${file2##*/}.ref_based.nucmer.delta.filter.syri.coords && \ show-snps -ClrTH ${file1##*/}.${file2##*/}.ref_based.nucmer.delta.filter > ${file1##*/}.${file2##*/}.ref_based.nucmer.delta.filter.snp && \ show-diff ${file1##*/}.${file2##*/}.ref_based.nucmer.delta.filter > ${file1##*/}.${file2##*/}.ref_based.nucmer.delta.filter.inv && \ perl /public/work/Pipline/Structural_Variation/pipeline/2.1.1/bin/filter_the_MUmmer_SNP_file.pl ${file1##*/}.${file2##*/}.ref_based.nucmer.delta.filter.snp ${file1##*/}.${file2##*/}.ref_based.nucmer.delta.filter.snp.SNPs ${file1##*/}.${file2##*/}.ref_based.nucmer.delta.filter.snp.Insertions ${file1##*/}.${file2##*/}.ref_based.nucmer.delta.filter.snp.Deletions 10000000 && \ touch snp_indel.end.tmp && \ mv snp_indel.end.tmp snp_indel.end && \ sleep 10 fi done done ,增加一个判断,使/public/work/Personal/wuxu/qiantao_17路径下以.fasta结尾的文件两两一组不分前后只组合一次,然后再执行touch 后面的代码
好的,您可以将原始代码修改为以下内容:
```bash
data_dir='/public/work/Personal/wuxu/qiantao_17'
files=( "${data_dir}"/*.fasta )
for (( i=0; i<${#files[@]}-1; i++ )); do
for (( j=i+1; j<${#files[@]}; j++ )); do
file1=${files[i]}
file2=${files[j]}
touch snp_indel.end.sh && cat snp_indel.end.sh && \
export PATH=/public/work/Personal/pangshuai/software/conda/miniconda3/bin/:${PATH} && \
if [ "$file1" != "$file2" ]; then
nucmer --mum -t 8 -g 1000 -p ${file1##*/}.${file2##*/}.ref_based.nucmer $file1 $file2 && \
delta-filter -1 -l 200 ${file1##*/}.${file2##*/}.ref_based.nucmer.delta > ${file1##*/}.${file2##*/}.ref_based.nucmer.delta.filter && \
dnadiff -d ${file1##*/}.${file2##*/}.ref_based.nucmer.delta.filter -p ${file1##*/}.${file2##*/}.ref_based.nucmer && \
show-coords -rcloT ${file1##*/}.${file2##*/}.ref_based.nucmer.delta.filter > ${file1##*/}.${file2##*/}.ref_based.nucmer.delta.filter.coords && \
show-coords -THrd ${file1##*/}.${file2##*/}.ref_based.nucmer.delta.filter > ${file1##*/}.${file2##*/}.ref_based.nucmer.delta.filter.syri.coords && \
show-snps -ClrTH ${file1##*/}.${file2##*/}.ref_based.nucmer.delta.filter > ${file1##*/}.${file2##*/}.ref_based.nucmer.delta.filter.snp && \
show-diff ${file1##*/}.${file2##*/}.ref_based.nucmer.delta.filter > ${file1##*/}.${file2##*/}.ref_based.nucmer.delta.filter.inv && \
perl /public/work/Pipline/Structural_Variation/pipeline/2.1.1/bin/filter_the_MUmmer_SNP_file.pl ${file1##*/}.${file2##*/}.ref_based.nucmer.delta.filter.snp ${file1##*/}.${file2##*/}.ref_based.nucmer.delta.filter.snp.SNPs ${file1##*/}.${file2##*/}.ref_based.nucmer.delta.filter.snp.Insertions ${file1##*/}.${file2##*/}.ref_based.nucmer.delta.filter.snp.Deletions 10000000 && \
touch snp_indel.end.tmp && \
mv snp_indel.end.tmp snp_indel.end && \
sleep 10
fi
done
done
```
这里使用了一个数组 `files` 存储了所有以 `.fasta` 结尾的文件路径,然后使用两个 `for` 循环对其进行两两组合,并且加上了判断条件,使得每个文件只会和其他文件组合一次。
perl s/^[0-9]+$//g; $的作用是什么
在 Perl 的正则表达式中,`$` 符号匹配行尾的位置。在这个例子中,`$` 符号用来匹配整个字符串的行尾位置。
因此,这条语句的作用是将字符串中只包含数字字符的行全部删除。具体来说,正则表达式 `^[0-9]+$` 匹配只包含数字字符的行,`s///` 替换语句中的空字符串表示将匹配到的子串替换为空。最后的 `g` 模式表示进行全局替换,即将整个字符串中所有匹配到的子串都进行替换。
总之,这条语句的作用是将字符串中只包含数字字符的行全部删除。