Scripting Nano-hacks:最有用的小程序';我遇到过
这是第一个程序员。我们所有人都曾在某个时候用一些一次性代码自动完成一项任务。有时,敲出一行代码需要几秒钟的时间,有时,我们花费大量时间自动完成一个两秒钟的任务,然后再也不用它了 你发现哪一个小黑客足够有用,可以重用?甚至为…做一个别名Scripting Nano-hacks:最有用的小程序';我遇到过,scripting,automation,Scripting,Automation,这是第一个程序员。我们所有人都曾在某个时候用一些一次性代码自动完成一项任务。有时,敲出一行代码需要几秒钟的时间,有时,我们花费大量时间自动完成一个两秒钟的任务,然后再也不用它了 你发现哪一个小黑客足够有用,可以重用?甚至为…做一个别名 注意:在回答之前,请检查以确保它尚未打开或perl/ruby一行程序问题 对不起,我手头没有确切的代码,但是我在VS.Net中编写了一个正则表达式来搜索源代码,它允许我搜索注释以外的任何内容。它在我正在从事的一个特定项目中非常有用,在这个项目中,人们坚持注释代码是
注意:在回答之前,请检查以确保它尚未打开或perl/ruby一行程序问题 对不起,我手头没有确切的代码,但是我在VS.Net中编写了一个正则表达式来搜索源代码,它允许我搜索注释以外的任何内容。它在我正在从事的一个特定项目中非常有用,在这个项目中,人们坚持注释代码是很好的做法,以防你想回去看看代码的用途。这可以追溯到我的COBOL时代,但我有两个通用COBOL程序,一个批处理程序和一个在线程序(大型机人员会知道这些程序是什么)。它们是程序的外壳,可以接受任何一组参数和/或文件,并在IMS测试区域中运行、批处理或执行。我设置了它们,以便根据参数访问文件、数据库(DB2或IMSDB)和/或仅操作工作存储或其他
这很好,因为我可以测试这个日期函数,而不用猜测或测试为什么会有截断,或者为什么会有数据库异常终止。随着时间的推移,这些程序的规模不断扩大,包括各种各样的测试,并成为开发小组的主要任务。每个人都知道代码所在的位置,并将它们包括在单元测试中。这些程序变得如此庞大(大部分代码都是在测试中注释掉的),这些年来都是由人们贡献的。他们节省了这么多时间,解决了这么多的分歧 我编写了一个Perl脚本来映射我继承的一个遗留C程序的依赖项,而不会陷入无休止的循环。。。。这也存在钻石依赖问题 我写了一个小程序,当我收到朋友的电子邮件时,用一个很少使用的电子邮件帐户给我发电子邮件 我写了另一个小程序,如果我的家庭IP发生变化,它会给我发短信
举几个例子。几年前,我用PERL在自定义web应用程序平台上构建了一套应用程序。 一个很酷的特性是将SQL查询字符串转换成人类可读的句子,描述结果
代码相对较短,但最终效果很好。我有一个你运行的小应用程序,它将GUID转储到剪贴板中。您可以运行它/noui,也可以不运行。对于UI,它是一个按钮,每次单击它时都会删除一个新的GUID。如果没有它,则删除一个新的,然后退出
我主要从内部使用它,而不是将其作为外部应用程序并映射到快捷方式。我正在编写一个严重依赖xaml和guid的应用程序,所以我总是发现我需要将一个新的guid粘贴到xaml中…我有两个ruby脚本,我会定期修改它们以下载所有各种网络喜剧。非常方便!注意:它们需要wget,所以可能是linux。注2:在试用之前请阅读这些内容,它们需要对每个站点进行一些修改 基于日期的下载程序:
#!/usr/bin/ruby -w
Day = 60 * 60 * 24
Fromat = "hjlsdahjsd/comics/st%Y%m%d.gif"
t = Time.local(2005, 2, 5)
MWF = [1,3,5]
until t == Time.local(2007, 7, 9)
if MWF.include? t.wday
`wget #{t.strftime(Fromat)}`
sleep 3
end
t += Day
end
或者您可以使用基于数字的方法:
#!/usr/bin/ruby -w
Fromat = "http://fdsafdsa/comics/%08d.gif"
1.upto(986) do |i|
`wget #{sprintf(Fromat, i)}`
sleep 1
end
我在分类linuxes下使用此脚本来检查机器之间的目录复制(或到CD/DVD)是否有效,或者复制(例如ext3 utf8 filename->fusebl)是否有效 k) 文件名中的特殊字符已损坏
#!/bin/bash
## dsum Do checksums recursively over a directory.
## Typical usage: dsum <directory> > outfile
export LC_ALL=C # Optional - use sort order across different locales
if [ $# != 1 ]; then echo "Usage: ${0/*\//} <directory>" 1>&2; exit; fi
cd $1 1>&2 || exit
#findargs=-follow # Uncomment to follow symbolic links
find . $findargs -type f | sort | xargs -d'\n' cksum
#/bin/bash
##dsum在目录上递归地进行校验和。
##典型用法:dsum>输出文件
导出LC_ALL=C#可选-在不同地区使用排序顺序
如果[$#!=1];然后回显“用法:${0/*\/}”1>&2;出口fi
cd$1>&2 | |退出
#findargs=-follow#取消注释以跟随符号链接
找到$findargs-类型f | sort | xargs-d'\n'cksum
任何时候我写一个聪明的列表,理解或使用python中的map/reduce。有一个是这样的:
if reduce(lambda x, c: locks[x] and c, locknames, True):
print "Sub-threads terminated!"
我之所以记得,是因为我自己想出了它,然后在别人的网站上看到了完全相同的代码。现在,可能会这样做:
if all(map(lambda z: locks[z], locknames)):
print "ya trik"
我今天在dotfiles.org上找到了这个。这很简单,但很聪明。我觉得自己没有想到这件事很愚蠢
###
### Handy Extract Program
###
extract () {
if [ -f $1 ] ; then
case $1 in
*.tar.bz2) tar xvjf $1 ;;
*.tar.gz) tar xvzf $1 ;;
*.bz2) bunzip2 $1 ;;
*.rar) unrar x $1 ;;
*.gz) gunzip $1 ;;
*.tar) tar xvf $1 ;;
*.tbz2) tar xvjf $1 ;;
*.tgz) tar xvzf $1 ;;
*.zip) unzip $1 ;;
*.Z) uncompress $1 ;;
*.7z) 7z x $1 ;;
*) echo "'$1' cannot be extracted via >extract<" ;;
esac
else
echo "'$1' is not a valid file"
fi
}
###
###方便提取程序
###
摘录(){
如果[-f$1];则
每箱1元
*.tar.bz2)焦油xvjf$1;;
*.tar.gz)焦油xvzf$1;;
*.bz2)本齐2$1;;
*.rar)unrar x 1美元;;
*.gz)gunzip$1;;
*.tar)焦油xvf$1;;
*.tbz2)焦油xvjf$1;;
*.tgz)焦油xvzf$1;;
*.zip)解压缩$1;;
*.Z)解压缩$1;;
*.7z)7z x$1;;
*“回声”“$ 1”不能通过>提取> p>提取。这是一个在标准输入中将逗号放在任何大数的中间的过滤器。
$ cat ~/bin/comma
#!/usr/bin/perl -p
s/(\d{4,})/commify($1)/ge;
sub commify {
local $_ = shift;
1 while s/^([ -+]?\d+)(\d{3})/$1,$2/;
return $_;
}
我通常用它来处理长长的大数字输出列表,而且我厌倦了计算小数位数。现在我不用看了
-rw-r--r-- 1 alester alester 2244487404 Oct 6 15:38 listdetail.sql
我可以将其作为ls-l | comma
运行并查看
-rw-r--r-- 1 alester alester 2,244,487,404 Oct 6 15:38 listdetail.sql
我有20或30个这样的东西,因为一旦我在windows中为我的标准控制台应用程序编写了框架,我几乎可以随意使用任何逻辑,所以我有很多这样的小东西来解决特定的问题
我想我现在经常使用的是一个控制台应用程序,它接受stdin,并根据将正则表达式与颜色匹配的xml配置文件对输出进行着色。我使用它来查看构建中的日志文件。另一个是命令行启动器,因此我不会污染我的PATH env var,而且它无论如何都会超过某些系统的限制mely win2k.而不必在SQL查询分析器中重复打开文件
isqlw -S servername -d dbname -E -i F:\blah\whatever.sql -o F:\results.txt
alias x="xterm" # local
alias xd="ssh -Xf me@development_host xterm -bg aliceblue -ls -sb -bc -geometry 100x30 -title Development"
alias xp="ssh -Xf me@production_host xterm -bg thistle1 ..."
#!/usr/bin/env ruby
require 'rubygems'
require 'dnssd'
handle = DNSSD.browse('_ssh._tcp') do |reply|
print "alias #{reply.name}='ssh #{reply.name}.#{reply.domain}';"
end
sleep 1
handle.stop
eval `ruby ~/.alias_shares`
import sys
import subprocess as sp
pgm = "isql"
if len(sys.argv) == 1:
print "Usage: \nsql sql-string [rows-affected]"
sys.exit()
sql_str = sys.argv[1].upper()
max_rows_affected = 3
if len(sys.argv) > 2:
max_rows_affected = int(sys.argv[2])
if sql_str.startswith("UPDATE"):
sql_str = "BEGIN TRANSACTION\\n" + sql_str
p1 = sp.Popen([pgm, sql_str],stdout=sp.PIPE,
shell=True)
(stdout, stderr) = p1.communicate()
print stdout
# example -> (33 rows affected)
affected = stdout.splitlines()[-1]
affected = affected.split()[0].lstrip('(')
num_affected = int(affected)
if num_affected > max_rows_affected:
print "WARNING! ", num_affected,"rows were affected, rolling back..."
sql_str = "ROLLBACK TRANSACTION"
ret_code = sp.call([pgm, sql_str], shell=True)
else:
sql_str = "COMMIT TRANSACTION"
ret_code = sp.call([pgm, sql_str], shell=True)
else:
ret_code = sp.call([pgm, sql_str], shell=True)