dig dns
sed -i '/\(1078\|1117\|1149\)/d' file
cat /proc/net/sockstat
ls *_ | xargs rm
等价
rm `ls *_`
git status | grep modified | awk '{print $3}' | xargs -i git add {}
ls | grep -vP "ii|hh|dir_dir" | xargs -i mv {} dir_dir/
sed匹配一部分改为大写:
sed -i s'/[a-zA-Z_]\+ =/\U&/' const_value.h
批量修改文件名:
for file in `ls aaa_*`; do mv $file `echo $file | sed 's/aaa_/bbb_/'`; done
for a in `cat 2157503784.aid`; do curl "http://xxx.domain/int/entity/$a.json" | grep -oP "\"proper_title\":.*\"series"; done > 2157503784.aid_withname
awk '{print $1, strftime("%m%d %H:%M:%S",$7)}' timestamp.conf
注意 grep 要加上 -q,否则判断$?总是0。加上 -q 之后,如果匹配成功返回 0,否则返回 1.。。什么破规则。。
for file in `ls | grep run_`; do grep -q "$file" useful.conf; if [ $? != 0 ]; then echo $file; fi; done
tail -n 30000 /data/logs/access.log | awk '{print $6}' | awk -F/ '{print $3}' | awk -F: '{print $2$3$4}' | awk 'BEGIN{total=0} {total++; time[$0]++;} END{print total; for(i in time){print i, time[i]}}'
awk 可以用或逻辑
awk '{if($4>0.05 || $4=="-") print $0}' /data/logs/access.log
svn up -r version
将某文件夹递归scp到使用key认证的远程server:
1. 在client端生成 key pair, 将公钥(以.pub结尾)的内容添加到远程server的 /$HOME/.ssh/authorized_keys 的末尾。
2. scp -i private_key_file -r folder_digui username@server:/directory
删除某文件夹中不匹配某名称test的所有文件:
rm -f `ls | grep -v test`
将某文件夹下(包括子目录)所有的文件中出现“/projects”的文本替换为“/data”:
sed -i "s/\/projects/\/data/g" `grep -rl "/projects" *`
sed 正则:
sed -i s'/theme_id: \([0-9]*\)entity_number: \(.*\)/theme_id: \1 entity_number: \2/' 11
vim 复制粘贴到系统剪切板:
shift v 选中要选择的区域, "+y 复制到系统剪切板,"+p 将系统剪切板的内容粘贴到vim中。
如果在Xshell中连接到的终端(server不同)希望复制粘贴,可以 cat 查看文件内容,ctrl insert 复制,然后另外的终端 shift insert 或者 鼠标中键 粘贴。
protobuf 中的int必须要写明int32这种类型。
ctags 使用要在有tags文件的目录启动vim,否则找不到tag。
make_pair(aaa, bbb)
不要写成
make_pair(<aaa, bbb>);
呃呃呃呃呃呃
/etc/crontab
svn add 某目录 报错:“ xx is already under version control”。
原来是因为该目录是我从其他文件夹拷过来的,而且是属于另外一个svn repository的文件夹,所以就有 .svn 目录了。
所以需要将该文件夹以及所有子目录中的.svn目录删除掉,就可以add了。
使用post-review时,如果有新添加的文件,需要先 svn add 新文件或新目录。才能反映在review board上。
同样的,如果有删除掉的文件,需要先 svn delete 旧文件或目录。才能反映在review board上。
而不能只是直接删除掉文件,否则post-review过程中会出错。
c++ 类的static成员在类中只是声明,需要在类定义之外(也就是}之外)定义后才能使用。否则将报链接错误。
一般在对应的cpp文件中定义,另外,定义的时候一定不要加上static修饰符。否则表示文件作用域(类似static自由函数),编译器也会报错。
类的static成员,每个类只有一份,所以可以在线程之间共享。
使用boost thread库,boost::thread thd1(callable_object) 创建线程,默认是copy callable_object到新的线程,
所以,即使定义的callable_object是全局的或者是static的,该变量(以及其成员变量,即使是volatile成员)也不能在线程之间共享。
如果希望共享变量(如判断变量flag判断线程是否需要结束),则需要在创建线程时传引用:
boost::thread thd2(boost::ref(callable_object)).
编译程序添加链接库时,写成boost_thread,而不要写成libboost_thread.so... g++ -std=c++11 -lboost_thread thread_.cpp
检查从couchbase得到的数据是否为空:
grep "Get null remote data info" *
递归撤销本目录的本地修改,改为与之前从 svn checkout 的一致。如果不加 -R,不会撤销对本目录中文件的修改。
svn revert -R .
在vi中插入序列10到20.(多行) :r !seq 10 20
在vi中插入序列10到20.(一行) :r !echo {10..20}
接收端(server):
nc -l 9999 > file.txt
发送端:
nc ip 9999 < file.txt
netstat
-a 显示所有连接
-p 显示程序名称
-n 不要显示别名,能显示数字的地方显示数字
今天编译项目,结果boost filesystem链接报错。
原来是因为装libgnome(或者是其他什么东西的时候),给我装了个1_41版本。导致原本的1_51版本的库被屏蔽。yum clean 之后解决。
在JDK的安装路径下,src.zip是全部的java源程序。
grep -oE 'area=\w+' access.log | awk -F= '{print $2;}' | awk 'BEGIN{total = 0} {total++; area[$0]++; } END{print total; for(i in area){print i, area[i]}}'
删除匹配行:
sed -i /aaa/d conf
!!!!如果要删除的匹配行是 “util/common_function”
sed -i /util\\/common_function/d frontend/common_function.h
删除匹配行以及下面6行。
ls | grep file | xargs -i sed -i '/aaa/,+6d' {}
strace:检测系统调用
pstack: 输出各线程信息。
倒序输出,浮点排序第二个域
sort -grk2 file.data | head
显示所有的帮助文档,文档间切换用 q,如果不加 -a,只会显示找到的第一份文档。
man -a "command"
signum specifies the signal and can be any valid signal except SIGKILL and SIGSTOP
grep 或逻辑
tailf /data/logs/access.log | grep -E "aaa\?|aaa/index\?"
sed \+\)等需要转义
sed -i s'/\(\s\+\)entity_type: 1$/\1entity_type: 1\n\1entity_type: 8/' conf
batch copy.
for i in `ls | grep t_`; do cp $i `echo $i|sed "s/.conf/_free.conf/"`; done
如果有变量替换要用双引号哦亲!
变量截取赋值,变量拼接字符串哦亲!
for file in `ls *_free.conf`; do file_no_suffix=`echo $file|sed s'/_free.conf//g'`; repl="${file_no_suffix}_free"; sed -i "s/$file_no_suffix/$repl/g" $file; done