V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  ysmood  ›  全部回复第 15 页 / 共 15 页
回复总数  297
1 ... 6  7  8  9  10  11  12  13  14  15  
2015-01-12 01:13:43 +08:00
回复了 ysmood 创建的主题 程序员 如何脱离 grep, sed, awk 完成一些批量任务?
@rail4you 我在文章后面加了一条附言,可能误解了我的文意。

ruby 和 python 不同,是适合写 one line 的,它有 do 和 end 关键字,不受缩进等格式限制。而且函数式编程大部分问题是 chain each map reduce 来解决的,常规问题 one line + 强大的原生库都能解决。

python 党的话可以看看第 18 条回复,是非常不错的 one line 选择。
2015-01-11 16:04:47 +08:00
回复了 ysmood 创建的主题 程序员 如何脱离 grep, sed, awk 完成一些批量任务?
@RemRain 是的,只要入口点是 shell 就无法避免引号的问题,这个就算用 grep sed 之类的也是很头疼的问题,比如我第三个例子里有文件的文件名本身含有引号和空格的时候,grep sed 需要再额外处理一次转义,这个时候反而能体现出一般脚本语言的优势。

我举 ruby 的例子大概是希望知道 ruby 基础知识的人能不费力的看懂单引号内的代码,外围的 r '' 是固有代码,所以不会是视觉中心。这里面的代码是不需要任何多余转义的,跟正常 ruby 一样。

比如第一个里面的 puts `ls`[/.*\d.*/] 这一段体现了很多 ruby 有意思的特性,比如类似 subshell 的撇号 `ls` 能返回系统命令的 stdout 到一个 string 变量,然后这个 string 变量可以在数组运算符里写 正则 [/.*\d.*/] 来选择想要的部分,这设计得非常合乎常理,任何一个人都应该能感到这种统一的简洁性。

第二个 $_.gsub! /y/, "o" * 30

这个例子也更能体现有意思的地方,比如 $_ 就是我们熟悉的 shell 变量,ruby 里也有,gsub 用于替换也是很常见的命名方式,一个字符串乘以数字代表字符串重复 n 次:“o” * 30 (python 支持这种写法)。这些表现都比 shell 的写法更合乎人的一般思维,不是吗?

第三个要真的写 shell,转义文件名里的特殊字符都需要写费心写一段转义处理。这边一个

F.mv a, b

就解决了这个问题。由于是内核的 mv 方法,传两个字符串进去,即使字符里有再多的空格,单双引号,反斜线,也完全不用像 shell 脚本那样绕来绕去。

配置环境我都是跑一个脚本自动 deploy 到各个机器的,不费神的,也不是什么特别不能夸平台的语言或配置。甚至在 Windows 里,没有 grep,sed 等工具的情况下他们也能正常使用,毕竟 WIndows 里装一个 ruby 比装一套 cygwin 之类工具可能更省时又少 bug。
2015-01-11 14:49:47 +08:00
回复了 ysmood 创建的主题 程序员 如何脱离 grep, sed, awk 完成一些批量任务?
@xcv58 ag 还是上 github 页吧 https://github.com/ggreer/the_silver_searcher。看来可以用于替换 grep 了,自动 .gitignore 这个非常不错,长姿势了!
2015-01-11 14:41:49 +08:00
回复了 ysmood 创建的主题 程序员 如何脱离 grep, sed, awk 完成一些批量任务?
@lsmgeb89 通常情况下 C 处理速度肯定更快,我文章后面也提到了这个问题。不过你感兴趣的话可以看看这篇 “纯 js 写的 mysql parser,比 C 快” http://2012.jsconf.eu/speaker/2012/09/05/faster-than-c-parsing-node-js-streams-.html

我的理解是某种特定情况下脚本语言可能在字符串处理上能更容易优化解释器。而静态编译语言要编写同等优化程度的解释器,虽然是可能办到的,会难太多,以至于人们更愿意节省掉这部分时间去创造新的方案。仅仅个人观点,可能是错误的。
2015-01-11 14:10:15 +08:00
回复了 ysmood 创建的主题 程序员 如何脱离 grep, sed, awk 完成一些批量任务?
@9hills 我平时都是写个 shell 函数来做,比如 ping 一个域名用下面这个函数就可以直接 ping 任意一个网址,而不是只能 ping 标准 host:

ys-ping http://test.com/other/path?with=query

ys-ping test.com

ys-ping () {
ret=$(python -c "
import urlparse
s = '$1'
if s.find('://') < 0:
s = 'http://' + s
host = urlparse.urlparse(s).netloc
print(host)
")
ping $ret
}

一行写 python 太伤神,还是换个方式来比较好。

话说我很好奇,怎么没有 ruby 党站出来吐个槽什么的。
2015-01-11 13:49:01 +08:00
回复了 ysmood 创建的主题 程序员 如何脱离 grep, sed, awk 完成一些批量任务?
@xcv58 ag 是啥?你也可以用 alias 啊,这个不反应逻辑的长短性啊,没必要在意这个。入口点命令长度忽略,只看作用部分。第二个你这么写明显复杂很多吧?ag 应该就是某种 grep 的 alias 吧?

我第一个作用部分只有 `ls`[/.*\d.*/],第二个只有 $_.gsub! /y/, "o" * 30
2015-01-11 12:45:29 +08:00
回复了 ysmood 创建的主题 程序员 如何脱离 grep, sed, awk 完成一些批量任务?
@xcv58 我也是昨天刚看了电影《The Imitation Game》,我这儿也不是想跟任何最佳实践较真。我文中最后也表达了类似观点,只是我觉得我们可以在使用 best practice 的时候不要忘记自己的思考,以及思考的乐趣。我写这文纯是想娱乐下大家,若是觉得有趣笑一笑,我就非常感激了,即使觉得我愚钝,我也没什么想反驳的,毕竟我也是刚入门~
2015-01-11 12:33:35 +08:00
回复了 ysmood 创建的主题 程序员 如何脱离 grep, sed, awk 完成一些批量任务?
@xcv58 另外如果能不用 pipe 而写的比我上面的例子更简短易懂,求赐教,我也是想扩展下思路,先谢谢了~
2015-01-11 12:29:07 +08:00
回复了 ysmood 创建的主题 程序员 如何脱离 grep, sed, awk 完成一些批量任务?
@xcv58 是看了这篇的评论有感而发 http://v2ex.com/t/160899。我平时还是会大量使用 grep sed 的。只是提供一些可能的思考方式,抛砖引玉用。
2015-01-11 12:10:40 +08:00
回复了 ysmood 创建的主题 程序员 如何脱离 grep, sed, awk 完成一些批量任务?
@jason52 思维可能有点跳跃了,大概想表达,利用好自己熟悉的东西,用创造力让它发挥更好的作用,往往最能解决当下所需。比如利用 pipe + python 解决 python 难以单行写代码的问题。
2015-01-11 12:07:48 +08:00
回复了 ysmood 创建的主题 程序员 如何脱离 grep, sed, awk 完成一些批量任务?
@Havee 最近 Github 比较难打开,就全部贴过来了,同步发布的,不知道算不算违规。
2015-01-11 12:05:04 +08:00
回复了 ysmood 创建的主题 程序员 如何脱离 grep, sed, awk 完成一些批量任务?
@ysmood 请注意看作者,都是我
2015-01-11 11:42:03 +08:00
回复了 otmb 创建的主题 程序员 sed awk 这俩丑陋的东西,还有必要学么?
@binux 写了另一个主题讨论这个问题,http://v2ex.com/t/161060,不知道会不会有用。比如 haskell 语言是没有 for 循环的,很多情况下我代码里不用 for 循环也能用函数式编程的方法解决大部分问题。ruby 和 python 已经很函数式了。map reduce 就能搞定很多常规问题了。
2015-01-11 03:37:26 +08:00
回复了 otmb 创建的主题 程序员 sed awk 这俩丑陋的东西,还有必要学么?
@binux 菊苣竟然不知道 python 的 -c 选项吗? 比如打印 “0”:python -c 'print 0' 。即使不用 -c 选项,用 pipe 也是可以的,如 echo 'print 0' | python。这种用法非常标准,ruby,lua,node 之类的现在解释器都支持。
2014-11-20 22:37:32 +08:00
回复了 ysmood 创建的主题 酷工作 [北京] 百度音乐招聘前端实习生
@pcwow 抱歉最近简历很多,我们无法保证能恢复每个人,请见谅。
2014-11-20 22:34:11 +08:00
回复了 ysmood 创建的主题 酷工作 [北京] 百度音乐招聘前端实习生
有兴趣,有能力的同学随时欢迎。到岗时间希望最好年内。
2014-11-20 21:22:34 +08:00
回复了 ysmood 创建的主题 酷工作 [北京] 百度音乐招聘前端实习生
抱歉 我们是 web 前端, win 版不是我们在维护
1 ... 6  7  8  9  10  11  12  13  14  15  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5612 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 18ms · UTC 06:36 · PVG 14:36 · LAX 22:36 · JFK 01:36
Developed with CodeLauncher
♥ Do have faith in what you're doing.