Monday, July 25, 2016

python正则表达式匹配含有时间的文件

import os
import re
files=os.listdir(os.getcwd())
for file in files:
    if re.search(r'\d{4}-\d{2}-\d{2}',file)!=None:
        if re.search(r'\d{4}-\d{2}-\d{2}',file).group(0)>='2016-07-01':
            print file
            print 'hah'
        else:
            pass
       
    else:
        pass


文件中含有
888888dddd2016-07-01hoho.txt
2016-06-29.txt
两个文件

扩展 匹配时间

有这么三种类型都是合法的
1,YYYY-MM-DD
2,YYYY-MM-DDTHH:mm:ss
3,  YYYY-MM-DDTHH:mm:SS.sss

import re
print re.search(r'\d{4}-\d{2}-\d{2}''xxxx1990-12-20xxxx').group(0)
print re.search(r'\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}''xxxx2005-06-04T18:37:11xxxx').group(0)
print re.search(r'\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{3}''xxxx2005-06-04T18:37:11.111xxxx').group(0)
 
pattern=re.compile(r'(\d{4}-\d{2}-\d{2})((T\d{2}:\d{2}:\d{2}|))((.\d{3})|)')
print pattern.search('xxxx2005-06-04T18:37:11.111xxxx').group(0)

mongo查询

Select a, b from users
db.users.find({},{a:1, b:1})
查询表
Select * from users
db.users.find()
查询表
Select * from users where age=33
db.users.find({age:33})
条件查询
Select a, b from users where age=33
db.users.find({age:33},{a:1, b:1})
条件查询
select * from users where age<33
db.users.find({'age':{$lt:33}})
条件查询
select * from users where age>33 and age<=40
db.users.find({'age':{$gt:33,$lte:40}})
条件查询
select * from users where a=1 and b='q'
db.users.find({a:1,b:'q'})
条件查询
select * from users where a=1 or b=2
db.users.find( { $or : [ { a : 1 } , { b : 2 } ] } )
条件查询
select * from users limit 1
db.users.findOne()
条件查询
select * from users where name like "%Joe%"
db.users.find({name:/Joe/})
模糊查询
select * from users where name like "Joe%"
db.users.find({name:/^Joe/})




db.getCollection('info').find({type:2,"data.issue_type":"SUGGESTIONS","created":{$gt:1467388800,$lt:1469980800}}).count()

db.getCollection('info').distinct("data.issue_type",{type:2})


db.getCollection('detail').find({title: /.*郑爽.*/})



mongo查询某个字段是否存在,并删除记录里的这个字段

 20583人阅读 评论(3) 收藏 举报
 分类:


db.course.find( { "lectures.lectures_count": { $exists: true } } )
查询course表中,存在lectures_count字段的记录信息

删除course表中,所有的lectures.lectures_count字段
db.course.update({},{$unset:{"lectures.lectures_count":""}},{multi:true})

根据条件往表里插入一个字段
db.lecture.update({"course_id":"5352d5ab92fc7705666ae8c9"},{$set:{"file_type":"PDF"}},{multi:true})

在mongo中有一个field是list类型的,那怎么查询哪些文档超过了这个长度呢
方法:db.accommodations.find({'name.1': {$exists: true}})
参见http://stackoverflow.com/questions/7811163/query-for-documents-where-array-size-is-greater-than-1/15224544#15224544


mongo中查询count distinct
db.content_simhash_repeat.distinct('url')
db.content_simhash_repeat.distinct('url').length

Thursday, July 14, 2016

linux命令记录

1.
  1. $ while true; do date >> date.txt ; sleep 5 ; done &
  2. avi@deb:~$ (cd /home/avi/Downloads/)
  3. ctrl+l 效果等于clear

排序

假设先按第6列数字倒序,再此基础上再按第5列顺序排列:
sort -k6nr -k5n file.txt
注意不能用以下排序方法:
sort -k6 -nr -k5 -n file.txt
这样最后结果还是按第五列排了

linux 如何显示一个文件的某几行(中间几行)

【一】从第3000行开始,显示1000行。即显示3000~3999行
cat filename | tail -n +3000 | head -n 1000

【二】显示1000行到3000行
cat filename| head -n 3000 | tail -n +1000

*注意两种方法的顺序

分解:
    tail -n 1000:显示最后1000行
    tail -n +1000:从1000行开始显示,显示1000行以后的
    head -n 1000:显示前面1000行

【三】用sed命令

 sed -n '5,10p' filename 这样你就可以只查看文件的第5行到第10行


判断是否为空


判断一个脚本中的变量是否为空,我写了一个这样的shell脚本:

  1. #!/bin/sh
  2. #filename: test.sh
  3. para1=
  4. if [ ! -n $para1 ]; then
  5.  echo "IS NULL"
  6. else
  7.  echo "NOT NULL"
  8. fi

然后把该脚本:test.sh通过chmod +x 改为可以执行的脚本,执行后输出的结果为: NOT NULL,很是奇怪,最后,通过查询一些资料发现,可以通过如下方式判断一个shell变量是否为空:
1. 变量通过" "引号引起来
      如下所示:,可以得到结果为 IS NULL.
  1. #!/bin/sh
  2. para1=
  3. if [ ! -n "$para1" ]; then
  4.  echo "IS NULL"
  5. else
  6.  echo "NOT NULL"
  7. fi

2. 直接通过变量判断
      如下所示:得到的结果为: IS NULL
  1. #!/bin/sh
  2. para1=
  3. if [ ! $para1 ]; then
  4.  echo "IS NULL"
  5. else
  6.  echo "NOT NULL"
  7. fi

3. 使用test判断
    得到的结果就是: dmin is not set!  
  1. #!/bin/sh
  2. dmin=
  3. if test -z "$dmin"
  4. then
  5.  echo "dmin is not set!"
  6. else
  7.  echo "dmin is set !"
  8. fi


4. 使用""判断
  1. #!/bin/sh
  2. dmin=
  3. if [ "$dmin" = "" ]
  4. then
  5.  echo "dmin is not set!"
  6. else
  7.  echo "dmin is set !"
  8. fi

#!/bin/bash
a="zzz"
if [[ "$a" = "" ]]
then
echo $a empty
else
echo $a no empty
fi

if [ -z "$VAR" ] ; then
command
fi

先写一些基本语法:

1、字符串判断

str1 = str2       当两个串有相同内容、长度时为真
str1 != str2      当串str1和str2不等时为真
-n str1        当串的长度大于0时为真(串非空)
-z str1        当串的长度为0时为真(空串)
str1           当串str1为非空时为真

2、数字的判断

int1 -eq int2    两数相等为真
int1 -ne int2    两数不等为真
int1 -gt int2    int1大于int2为真
int1 -ge int2    int1大于等于int2为真
int1 -lt int2    int1小于int2为真
int1 -le int2    int1小于等于int2为真

3 文件的判断

-r file     用户可读为真
-w file     用户可写为真
-x file     用户可执行为真
-f file     文件为正规文件为真
-d file     文件为目录为真
-c file     文件为字符特殊文件为真
-b file     文件为块特殊文件为真
-s file     文件大小非0时为真
-t file     当文件描述符(默认为1)指定的设备为终端时为真

3、复杂逻辑判断

-a         与
-o        或
!        非


grep精准匹配


面试时问到一个问题,要精确的找出进程名为abc,判断进程的数量是否在3-5之间,如果不在,就纪录下相关的信息
用ps aux | grep abc | grep –v grep | wc –l 统计出数量再进行判断
但是忽略了一点,如果是有进程名为abcd,abcde等有包含"abc"字符的,那么判断将会不准备,如果精确的匹配到abc呢,当时不知道,只能很诚实的回答,不清楚
其实答案很简单,用grep –w "abc" 或者是grep "\<abc\>"都可以实现
-w, --word-regexp         强制 PATTERN 仅完全匹配字词
纪录一下


隔几秒执行一条命令 ,监视器
watch -dn 'wc -l log.txt'

查看磁盘使用率
df -TH

更改权限
sudo chown -R yonghuming wenjianjia

计算md5
md5sum
查看文件大小
df -Th 用户查看一级目录大小
du -h 查看文件夹大小
du -h --max-depth=1 查看当前文件夹下文件夹大小
ls -lh 查看文件大小

#!/bin/bash
echo `dirname $0`/mac_open_hour.csv
查找文件,并且打印文件并匹配
find 20170611*.log | xargs cat |grep -E '22011716|2285906|1768039' > 1206_20170611.log
解压多个文件到指定目录
find 20170704*.zip| xargs -n1 unzip -d /haha/temp_log

grep使用http://www.cnblogs.com/luojinping/p/3380771.html

stat file 查看文件修改时间等


50
down voteaccepted
What's wrong with the good old,
for pid in $(ps -ef | grep "some search" | awk '{print $2}'); do kill -9 $pid; done
There are ways to make that more efficient,
for pid in $(ps -ef | awk '/some search/ {print $2}'); do kill -9 $pid; done
and other variations, but at the basic level, it's always worked for me.



删除特定的文件
find . -type f -name '* *' -delete
ll | egrep '\(*\)' | xargs -0 rm