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)