工具小结

标签: 工具 | 发表时间:2010-10-17 09:20 | 作者:welfear yboren
出处:http://www.cnblogs.com/welfear/

 

文档名称:工具小结(Tools Tips)
文档维护:Xuefeng Chang(welfear@gmail.com @welfear)
文档日期:2010.10.17


find . -name "*.java" | sed 's/.*\///' | \
sort | uniq -c | grep -v "^ *1 " | sort -r

短小精干!没错,在我开始认识它们的时候就是这样的感觉。
工具总是为解决问题而存在的,然而在我选择的时候还是
常常会有既生瑜何生亮的感叹。


00. regex && grep


正则表达式虽然不是工具,但每个工具都是它思想的延伸。
grep其实是g(lobal)/re/p(rint)。下面是几个应用例子:

grep '^word'    匹配以word为首的一行。
grep 'word$'    匹配以word为尾的一行。
grep 'x.y'      匹配x和y之间存在字符的一行。
grep '.*'       匹配任意字符。*为0个或多个前一字符。
grep '[chS]'    匹配c h S之一。
grep '[A-Z]'    匹配A-Z的某一个字符。
grep '[^!]'     匹配非!的字符。
grep '^$'       匹配空白行。
grep 'o\{2,5\}' 匹配2~5个o。

-I      忽略二进制文件。
-R      递推子目录。
-n      显示行数。
--color 高亮显示匹配字符。
-c      只显示匹配行数。
-v      输出不匹配的行。


01. cat && tac && tee


cat(conCATenate)用于串联文本,tac相反,倒序输出文本流。
- 表示从标准输入,用于表示标准输入在几个串联文本中的顺序。

-E 在行尾添加$。
-v 输出不可见字符。
-T 输出时将TAB转换为^I
-n 在行前添加行号
-b 只在非空白行前添加行号。

cat - file1 - file2 - file3 > file

将file1、file2、file3三个文件合并成一个文件,在每个文件开头
都可以在标准输入中直接输入文本,按Ctrl-D结束输入,Ctrl-U
删除当前行。也可以用shift+insert向标准输入粘贴文本。

cat -vet file

输出将文件中的非显示字符转义后的文本。

cat - file > newfile

在文件的开头插入文本。

cat -nb file > newfile

在行首插入行号。

利用Shell的Here Document功能可以更方便的编辑单一标准输入。
这样编辑时就和编辑命令行的情况一样了,Shell的快捷键也可以
使用。例如:

cat > file << EOF
> file context
> EOF

cat file
file context

tee与cat相对,从标准输入读取数据再它输出到标准输出和文件。
-a 追加模式输出至文件。
-i 忽略中断信号。

cat *.txt | tee bak1 bak2 #合并txt文件,并生成两个备份。


02. head && tail


head用于显示文本的头部,tail则显示文本的尾部。
head和tail默认时分别会从头或从尾输出10行文本。
-c 控制输出字节数。
-n 控制输出行数。

cat file | head -m | tail -n    #截取file中m-n行的内容。

tail可以用-f参数监控文件的追加数据,常用于监控日志文件。
tail -f /var/log/message

watch是更常用的监控文件变化工具。
watch -n1 -d /proc/meminfo


03. expand && unexpand


expand和unexpand用于转换文本中的制表位和对应字数的空格。

-t 改变默认TAB对应的列数,默认TAB为8列。
-a unexpand默认只转换行首的空格,-a表示转换所有。

expand -60 file > newfile


04. fold && fmt


fold和fmt用于格式化文本。

fold -s -w50

fold默认在第80列开始折行,这和Linux Kernel Code Style相同。
-w 改变默认开始折行的列数。
-s 表示折行时不拆分单词。

fmt -s -w80 -u

fmt默认在第75列开始折行,并保持相同的缩进。
-w 指定最大列数。
-u 格式化多余的空格,单词间一个空格,句子间两个空格。
-s 只格式化超出的行,不处理不足的行。


05. nc && wget


nc(netcat)是通过网络传输数据的工具。

nc ip port              #client
nc -l -p port           #server
nc ip port < file       #send file

-u 指示nc使用UDP协议传输数据,默认使用TCP协议。
Client和Server连接后,即可通过标准输入或重定向文件交换数据。

wget是网络下载工具。

wget -r -np -nd (--accept=iso) URL/dir/ #下载dir中所有文件。
wget i file_url_list.txt                #批量下载文件中URL。
wget -c URL                             #断点续传方式下载。
wget -m -k (-H) URL                     #镜像一个网站。


06. echo && awk


写入单行:

echo 1 > /proc/sys/net/ipv4/ip_forward
向/proc/sys/net/ipv4/ip_forward文件中写入字符"1"。


读出单列:

awk -F" " '{print $3}' /var/log/messages
从/var/log/message文件输出以空格为分隔符的第三列。


07. tr && sed


tr用于简单的替换文本。
tr -s "\t" "| " < file #将TAB替换为|,并去掉多余的空格。

下面两个命令都是将小写字符转换为大写:
tr [:lower:] [:upper:] < file
tr "a-z" "A-Z" < file

sed是流编辑器。

sed 's/^$/d' file       #删除所有空行。
sed 's/^[ \t]*$/d' file #删除所有只包含空格或者TAB行。
sed 's/"//g' file       #删除所有引号。
sed -i 's/ *$//' file   #删除行结尾的$字符。
sed -i 's/old/new/g' *.c#替换文本。
sed 's/patten/string&   #&用于替代patten。
sed 's/^/> /' file      #在行首添加>字符。
sed 's/$/$/' file       #在行尾添加$字符。

cat            |  sed ':'
cat -s         |  sed '/./,/^$/!d'
tac            |  sed '1!G;h;$!d'
grep           |  sed '/patt/!d'
grep -v        |  sed '/patt/d'
head           |  sed '10q'
head -1        |  sed 'q'
tail           |  sed -e ':a' -e '$q;N;11,$D;ba'
tail -1        |  sed '$!d'
tail -f        |  sed -u '/./!d'
cut -c 10      |  sed 's/\(.\)\{10\}.*/\1/'
cut -d: -f4    |  sed 's/\(\([^:]*\):\)\{4\}.*/\2/'
tr -s ' '      |  sed 's/ \+/ /g'
tr -d '\012'   |  sed 'H;$!d;g;s/\n//g'
wc -l          |  sed -n '$='
uniq           |  sed 'N;/^\(.*\)\n\1$/!P;D'
rev            |  sed '/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//'
basename       |  sed 's,.*/,,'
dirname        |  sed 's,[^/]*$,,'
xargs          |  sed -e ':a' -e '$!N;s/\n/ /;ta'
paste -sd:     |  sed -e ':a' -e '$!N;s/\n/:/;ta'
cat -n         |  sed '=' | sed '$!N;s/\n/ /'
grep -n        |  sed -n '/patt/{=;p;}' | sed '$!N;s/\n/:/'
cp orig new    |  sed 'w new' orig[/code:1:739eb4cef5]

http://sed.sourceforge.net/sed1line_zh-CN.html


08. cut && paste && join && rev && shred

cut用于选择截取文件中的某些列。
cut -d: -f1 /etc/passwd         #截取第1个:为分割符的字段。
cut -c3-5 /etc/passwd           #截取每行的第3到第5个字符。
cut -c 1-3,20,25- file          #多个字段的表示方式。

paste用于按列合并文件。
paste -d "," title name         #将头衔和名字对应起来。
Tester,A
Coder,B

-d 指示用于合并的分隔符。
-s 改变合并后数据的行和列。

split将大文件按照行货字符数分成若干小文件。
下列命令将file每隔3行分割,并将行和列转换后合并。效果是将
文件长度缩短,文件宽度加长:

split -l 3 file sp_file
paste -s sp_file*

FIXME! csplit
FIXME! join

rev file        #以相反的顺序打印每行内容。
shred file      #用垃圾字符覆盖文件,用于删除数据。


09. find && wc && xargs && diff && sum && md5sum


find . -name '*.[hc]' | xargs wc -l #统计h/c文件行数。

xargs可以将find的输出转化为wc的命令行参数。find -exec
也有此功能但大量输出时可能会有溢出问题。

wc
-l 统计行。
-m 统计字符。
-w 统计单词个数。

diff -urNp src dst > patch      #标准做法:-)
patch -p0 patch

sum file                        #产生文件的校验和以及块数。
md5sum file                     #产生文件md5数字签名。


10. sort && tsort && uniq


sort -u -m file1 file2 #排序后合并多个文件,不显示重复行。

sort -t: -k 1.3,5.7 -kgr 3 file

以:为分隔符,对第1个字段的第3个字符到第5个字段的7个字符
排序,得到结果后对第3个字段当作10进制数反向排序。

-u 只打印不同的行。
-m 合并不同文件。
-t 指示分隔符。
-k 指示字段范围。
-g 按照数字排序,-n表示按照整数排序。
-r 反序输出。

tsort进行有向图拓扑排序,常用于查找依赖关系。

cat dep
1 2
2 3
3 4
tsort dep
1
2
3
4

uniq用于去掉重复字符,一般已经被sort处理过。
-c        统计重复行数。
-u        显示没有重复的行。
-d        显示重复的行。
-f n      跳过n个字段进行比较。
-s n      跳过n个字符进行比较。
-w word   只对word字符进行比较。

uniq -f 3 /var/log/message。


11. tar && rar


tar (jz)xvf file.tar(.bz2/gz)           #解压缩。
tar (jz)cvf file.tar(.bz2/gz) file      #压缩。
tar (jz)tvf file.tar(.bz2/gz)           #查看。
unrar x file.rar                        #解压缩rar文件。


12. rename


rename "s/petten/new/" *


13. packet && kernel

dpkg -S `whick command`
apt-get -d source packet_name
apt-get install packet_name

make
make modules_install
make install
mkinitramfs -o kernel_name /lib/modules/kernel_version


14. Bash


切换目录:

cd -            相当于cd $OLDPWD
pushd dir       把目录压栈。
pushd +n        跳转到第n个目录。
poped +n        弹出第n个目录。
dir -v -p       查看当前目录堆栈。
> file          用于清空文件。

特殊字符:

?        匹配任何单一字符。
*        匹配任何字符。
[]       匹配某一范围字符,比如[a-z],代表小写字母。
[!]      代表非此范围字符。
~        代表用户主目录。~name表示name的主目录。
$        表示变量取值。
&        表示当前命令在后台执行。
\        表示续行。
|        表示管道。
;        命令分隔符。
< >      重定向符号。
``       命令替换。复杂的命令应该使用$()的形式。
\tab     补齐字符串。
&&       先执行前一个命令,如果成功再执行后一个。

设置别名:

alias clog='> /var/log/messages'
alias diff='diff -urNp'
alias dmesg='dmesg | less'
alias e='vim'
alias find='find . -name'
alias grep='grep --color -InRE'
alias log='vim /var/log/messages'
alias ls='ls --color=auto -lSh'
alias tag='ctags -R --c++-kinds=+p --fields=+iaS --extra=+q'

 

作者: welfear 发表于 2010-10-17 17:20 原文链接

评论: 0 查看评论 发表评论


最新新闻:
· LiMo基金会希望借微软诺基亚交易从中受益(2011-02-14 16:13)
· 李国庆微博再炮轰:屏蔽百度 当当估值高过阿里(2011-02-14 16:10)
· Keepio:向你社交网上的朋友出售物品(2011-02-14 15:51)
· IE9相比IE8丢失了什么?(2011-02-14 15:47)
· TweetDeck被收购对Twitter生态系统的影响(2011-02-14 15:35)

编辑推荐:上周热点回顾(2.7-2.13)

网站导航:博客园首页  我的园子  新闻  闪存  小组  博问  知识库

相关 [工具] 推荐:

工具小结

- yboren - 博客园-welfear
文档名称:工具小结(Tools Tips) 文档维护:Xuefeng Chang(welfear@gmail.com @welfear) 文档日期:2010.10.17 find. -name "*.java" | sed 's/.*\///' | \ sort | uniq -c | grep -v "^ *1 " | sort -r 短小精干.

Windows工具集

- - 互联网 - ITeye博客
参考: https://community.rapid7.com/servlet/JiveServlet/downloadBody/2881-102-2-6389/Mitigating%20Service%20Account%20Credential%20Theft%20on%20Windows.pdf.

Geek 漫画:工具

- Yaping - 煎蛋
原作 MANU,由 Oicebot 汉化. 男:我说,与其开车这么大老远过来拍照,我们不如把夏天那张照片在PS里用“色调”选项来改改……. Geek Sexy:旋转木马赛马大赛[v]. 漫画:数码Geek 乱战,他们眼中的对方. Geek Sexy:Cosplay 视频特效大Fight. Geek Sexy:哭泣的PC玩家.

手机:非工具

- 達 - 《商业价值》杂志
手机正在改变世界,因为它正在改变人类本身. 如果有外星人真的在观察人类,他们或许现在正在写下这样的记录:“这个物种正在经历一个剧烈的习性与形态变革期. 其过去100年来的科技爆发已经开始把这个物种带入‘体外进化’阶段——半导体技术正在让这群碳基生命体融合硅基基因,而这种融合已经从被称作‘手机’的沟通设备的‘器官化’开始了.

gdb调试工具

- - CSDN博客系统运维推荐文章
查看帮助一是man 命令,二是进入 www.gnu.org,找到gdb的帮助文档(更详细). gcc -Wall -g main.c -o main,只有这样才能产生调试信息,包括core的调试信息.     run(r)  运行,执行到断点,重新用r,表示重新开始执行.     list(l)  列出源代码,l 2,l main,l 2,16(数字表示行数).

佈署工具 Whiskey_disk

- - ihower { blogging }
(文章是2011年2月的草稿,放著大概也不會更新了,就貼出來吧. 在 舊作 Capistrano 就強調了自動化佈署:. 執行某些 script hook,例如跑 index. 自從 git 主宰之後,一直在找 Capistrano 和 Vald 之外的選擇:. * DeployYML https://github.com/postmodern/deployml 有點像是超簡單版的 whiskey_disk.

mysql监测工具

- - DBA Blog
mysql监测工具tuning-primer.sh. mysql的运算情况,我们可以一步一步的去查看,分析. 这样需要一定的时间,今天推荐给大家一个不错的脚本tuning-primer.sh,可以帮助我们去查看一下msyql的运行情况,产生报告和给出一些建议,我们可以根据这些建议,结合mysql服务器的实际情况,对mysql进行优化.

Linux 常用工具

- - SSORC.twSSORC.tw
http://www.cyberciti.biz/open-source/best-terminal-applications-for-linux-unix-macosx/ 它整理出 15 工具. siege – 壓力測試 (我好像用過一次). ngrep – 好用的封包過濾,類似 tcpdump.

30款基本UX工具 - 思维流程工具 & 原型工具

- - CSDN博客Web前端推荐文章
来源: GBin1.com. 现在的开发人员在建造网站时,注重的是布局和技术特性,但是往往忽略了更重要的一点,那就是用户体验. 如 果用户在使用的时候,不能简单清楚的知道该要如何操作,那么他们一定会选择另一个操作简单,浅显易懂的网站或者应用,绝不会在回到这个复杂难解的应用上 来. 一个令人舒服的用户体验,从另一个方面而言,可以让你的网站变得讨喜且令人印象深刻,这样一来,就比其他同类网站赢了一大截.

Java开源建站工具

- Amom - 阮一峰的网络日志
美国程序员Jon Scott Stevens,公布了他的创业公司所使用的开发工具清单. 他的语言平台是Java,开发项目是一个网站(还未上线). 所用到的工具都是开源的,可以免费得到. 在目前的创业者之中,用Java作为网站开发语言的人似乎很少. 这当然不是没有原因的,Java看上去确实不像是最便捷的网站开发工具,给人的感觉是用起来麻烦又费事.