碰到这货10年了,见到这俩,仍然感到十分恶心,不愿去学,
想问下大神,这俩还有必要学么:)
![]() | 1 Sunyanzi 2015-01-10 16:24:04 +08:00 如果不学这两个 ... 你要用什么来替代这两个的功能呢 ... |
![]() | 2 Draplater 2015-01-10 16:31:46 +08:00 这两个东西很有用 |
3 unasm 2015-01-10 16:31:58 +08:00 我工作中经常用到grep,从这个角度来说有一定学习的必要,但是没有必要太深入,够用就好 |
5 Havee 2015-01-10 16:32:40 +08:00 楼主没有这方面的需求吧,那当然没必要学 |
![]() | 6 likuku 2015-01-10 16:33:50 +08:00 awk 很好用啊...最简单的使用分隔符进行分列这个至少学下吧... |
![]() | 7 0zero0 2015-01-10 16:35:37 +08:00 遵循80/20法则,熟练掌握常用的几个sed/awk命令用不了多长时间,但可以起到很大的效果; 用Perl、Python当然可以实现sed/awk的功能,不过这需要更多的键盘敲击量…… |
8 otmb OP awk跑不了:( E:\>echo a b c | awk '{print $2}' awk: '{print awk: ^ invalid char ''' in expression 赶脚没错啊... |
![]() | 10 gangsta 2015-01-10 16:43:57 +08:00 via iPhone 楼主没看过编程珠玑? |
11 alansalexer 2015-01-10 16:44:39 +08:00 经常处理些字符串/文件,很方便,尤其一些小任务。 至于用python/perl也可以,比如python有一个https://github.com/Russell91/pythonpy ,让你可以直接在终端的同一行内执行python任务。 |
14 besto 2015-01-10 17:09:07 +08:00 提两个场景。 1,debian中直接remove包会产生状态为rc的包(配置文件还在)如果去除系统里所有rc包? 2,一个巨大的项目,现在需要把很多文件中字符串AAA替换成BBB如果做? |
![]() | 16 alexapollo 2015-01-10 17:16:55 +08:00 @besto 后者<c-h>是大部分IDE支持的功能。。。 |
![]() | 17 9hills 2015-01-10 17:16:56 +08:00 via iPhone 简单的说,就是爱用用…… 用Python也可以,自己选择呗。 |
![]() | 18 rrfeng 2015-01-10 17:18:06 +08:00 存在即合理 |
19 besto 2015-01-10 17:19:12 +08:00 @alexapollo 真的不知道c-h是啥功能。 |
![]() | 20 yakczh 2015-01-10 17:49:04 +08:00 学python就够了, perl都不用学了 |
![]() | 21 KDr2 2015-01-10 17:49:09 +08:00 perl one-liner rules them all. |
![]() | 22 hanai 2015-01-10 17:58:54 +08:00 运维需要哦~ |
![]() | 24 zhicheng 2015-01-10 18:12:01 +08:00 现在都是自动化运维,各种云计算的流行也让单机承载的业务越来越少,这两个东西用到的机会会越来越小。 |
![]() | 25 Zhongwei 2015-01-10 18:14:20 +08:00 晚上睡前抽出 1 小时看一下 The AWK Programming Language http://book.douban.com/subject/1876898/ 你会发现,这一小时在未来会节省你百倍的时间 |
![]() | 28 ivvei 2015-01-10 18:22:22 +08:00 没必要学了。有的是可以代替的。 |
![]() | 29 BGLL 2015-01-10 18:25:22 +08:00 awk 还是很好的嘛,有人说“又臭又长”,但有人觉得一行流就是方便 |
![]() | 31 expexp 2015-01-10 18:35:05 +08:00 sed 真心是天天必备。 |
![]() | 32 luoweihua7sync 2015-01-10 18:37:42 +08:00 你能理解做前端开发的都要用这2货查日志么。。。 |
![]() | 33 KentY 2015-01-10 18:57:01 +08:00 via Android 请定义丑陋与美好。 你觉得美好的东西,学了多深 |
![]() | 34 Sunyanzi 2015-01-10 19:16:43 +08:00 ![]() |
![]() | 35 jecvay 2015-01-10 19:17:15 +08:00 需要的! Python能实现但是也没这写起来这么快一句话搞定的. |
![]() | 36 zxdy 2015-01-10 19:26:11 +08:00 前两天有个日志解析脚本的优化,本来需要跑30多个小时,用了awk和sed之后,只花了2分半钟,楼主觉得有必要学吗 |
![]() | 37 nicai000 2015-01-10 19:29:52 +08:00 AWK怎么丑啦!!!!!!!!!!! |
![]() | 39 vinceguo 2015-01-10 19:36:23 +08:00 ![]() 谷歌sed tutorial第一条的网站里关于sed和awk的教程都很不错 http://www.grymoire.com/Unix/Sed.html |
![]() | 40 msg7086 2015-01-10 19:48:55 +08:00 基本上你用高级语言来实现的话,就是在重新发明这几个工具而已。 当然有时候用高级语言看起来更清晰点。 但是有人觉得one liner更舒服更方便。 |
![]() | 41 est 2015-01-10 19:52:20 +08:00 |
![]() | 43 uuspider 2015-01-10 20:09:00 +08:00 这两个东西,对着文档练练手,也用不了多长时间吧。 码农还怕丑陋?还怕“又臭又长”? |
![]() | 44 lululau 2015-01-10 20:10:41 +08:00 Perl 基本可以替代 sed 和 awk 的功能,而且不用记 sed 和 awk 里面那些不一样的正则语法,但是缺点也十分明显,sed 和 awk 分别都只有 3 个字母,而 perl 是 4 个字母,效率立马下降 33% 个人觉得对于简单到需要不到 20 个字符的 sed 或 awk 命令就能完成的任务来说,使用 sed 或 awk,对于更复杂的任务或者你记不清某个 meta-character 在 sed 或 awk 中是该转义还是不转义的时候就用 Perl |
![]() | 46 KentY 2015-01-10 20:23:27 +08:00 via Android @lululau 如果不清楚正则,不知道什么时候该转意,什么时候不用,那和awk,sed没关系,是对正则知识的欠缺,不补早晚有天会暴露。而且对它不了解,使用上也得不到精妙。 BTW,你说的那些不同的语法,其实是bre,ere,pcre的区别 |
![]() | 47 lululau 2015-01-10 20:40:32 +08:00 @KentY 博学! 找了几个简单的 sed/awk one liner,翻译成对应的 perl 命令,熟悉 sed/awk 而对 Perl 不了解的同学可以感受下: 1. gsed '/^$/d;G' filename perl -ne 'print unless /^$/' filename 2. gsed 's/reg/replace/flags' filename perl -pe 's/reg/replace/flags' filename 3. gsed '1!G;h;$!d' filename perl -e 'print reverse <>' filename 4. gsed '/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//' perl -pe '$_=reverse' 5. gawk '{print NR":"NF}' input.txt perl -alne 'print $., ":", @F+0' input.txt 6. gawk '{print $NF}' input.txt perl -alne 'print $F[-1]' 7. gawk 'NF > 2' input.txt perl -alne 'print if @F > 2' 8. gsed -n 100,200p filename perl -ne 'print if 100..200' filename |
![]() | 48 treo 2015-01-10 20:59:34 +08:00 如果都10年了还没学,说明你没必要学,学了也记不住,这俩东西学习曲线太陡,一个月不碰就得重新翻man。现在还学这个的也就剩下运维和*nix狂热爱好者了吧 |
![]() | 49 zxdy 2015-01-10 21:12:12 +08:00 @otmb 用了grep+sed,后来用截取字符串的办法处理每行,效率有了大概9倍的提升,但是经过测试发现实现的效率会随着日志变大而越来越低,可能是shell对大文件读取写入的IO有瓶颈,于是最后用了awk+sed,效果比较明显 |
50 kotokz 2015-01-10 21:18:49 +08:00 sed效率很一般,直接用perl吧 |
![]() | 51 Tinet 2015-01-10 21:33:10 +08:00 居然说这两东西丑,在没有深入学习之前请不要这样说 |
![]() | 52 faywong8888 2015-01-10 21:39:25 +08:00 开房数据盛传之时下载了数据库文件,看了一天sqlserver怎么导入最终搞不定。之后在cygwin下awk一下就搞定了。 |
![]() | 53 Bruta 2015-01-10 22:03:40 +08:00 via iPhone 这两个都是神器啊… |
![]() | 54 anguskwan 2015-01-10 22:15:49 +08:00 还有比这更性感的么。。。 |
![]() | 55 FatGhosta 2015-01-10 22:18:55 +08:00 我怎么觉得awk和sed是两个神器呢。。。 |
![]() | 56 Tink PRO 我只会sed,但是我知道这俩货太有用了 |
![]() | 57 love 2015-01-10 22:33:10 +08:00 虽然写过很多bash脚本,但这二货只会用一点点,也不想去学了。现在写复杂的脚本直接上python了,又易调试又好写。 |
![]() | 58 reverland 2015-01-10 22:38:39 +08:00 有些地方……没有python啊。 编译个python比编译个awk,sed费事些 |
59 semicircle21 2015-01-10 23:11:57 +08:00 perl python 什么的都能替代, 仅在不能使用这些语言的时候有用, 我能想到两种情况: 1. 嵌入式: 空间紧张. 2. 面向很多机器的场景, 每个 image 少个 python, 整体就能省下很多了. 这种东西实在没必要勉强学, 用到的时候就学, 用过了就自然忘~ |
![]() | 60 YORYOR 2015-01-10 23:39:25 +08:00 没想好怎么喷楼主,只跟windows打交道吧 |
![]() | 61 jarlyyn 2015-01-11 01:14:41 +08:00 sed重度粉丝路过。 没有sed基本都不知道该怎么写shell脚本了。 |
62 siteshen 2015-01-11 02:00:03 +08:00 |
![]() | 63 xiaowangge 2015-01-11 02:58:55 +08:00 via Android 日志解析利器。 |
![]() | 64 ysmood 2015-01-11 03:37:26 +08:00 @binux 菊苣竟然不知道 python 的 -c 选项吗? 比如打印 “0”:python -c 'print 0' 。即使不用 -c 选项,用 pipe 也是可以的,如 echo 'print 0' | python。这种用法非常标准,ruby,lua,node 之类的现在解释器都支持。 |
![]() | 65 R4rvZ6agNVWr56V0 2015-01-11 04:23:20 +08:00 没必要,你觉得没有必要就真的没有必要。就像有的人认为英文对于他们自己也是没必要的那样。 |
![]() | 69 bugeye 2015-01-11 07:44:31 +08:00 又想到一有perl的行版,android. |
![]() | 74 orzfly 2015-01-11 09:18:38 +08:00 cmd 是不支持单引号字符串的,如果你非要用 cmd 来调用 awk,请记得用双引号。以及 cmd 的转义字符是 ^ 不是 \,这个也请记住免得等会双引号里想用双引号…… 或者你可以在 cmd 里先打开 bash 再说…… |
![]() | 75 nowcoder 2015-01-11 09:58:35 +08:00 越丑越贤惠 |
![]() | 77 9hills 2015-01-11 11:20:02 +08:00 via iPhone |
![]() | 78 9hills 2015-01-11 11:23:39 +08:00 via iPhone @binux -c 中for循环一般用list comprehension替代,当然大多数情况下会变得很丑。。 |
![]() | 79 ysmood 2015-01-11 11:42:03 +08:00 @binux 写了另一个主题讨论这个问题,http://v2ex.com/t/161060,不知道会不会有用。比如 haskell 语言是没有 for 循环的,很多情况下我代码里不用 for 循环也能用函数式编程的方法解决大部分问题。ruby 和 python 已经很函数式了。map reduce 就能搞定很多常规问题了。 |
![]() | 81 Xbluer 2015-01-11 13:12:36 +08:00 生产系统是IBM的AIX。不让装Python、Ruby,不用这俩货没得用啊。 |
![]() | 82 Narcissu5 2015-01-11 13:27:49 +08:00 话说每次有人跟我说“Posix命名比windows科学”的时候,我就想吐槽:你知道awk代表什么么? |
![]() | 84 Xbluer 2015-01-11 20:46:29 +08:00 @otmb Bank系统,不让随便装这类开源软件。领导们认为这玩意不安全,你信么。其实吧,就是没有大公司背书,怕出了问题担责任。 |
![]() | 85 leafonsword 2015-01-13 18:12:43 +08:00 |
![]() | 86 raawaa 2017-07-15 19:19:18 +08:00 非常有用。 我自己用 Javascript 写了一个抓 AV 磁力链接的脚本。抓回来的链接都按番号存在子文件夹里。用 awk 批量处理之后直接喂给 transmission 去下载,节约了我不少生命。现在除了硬盘越来越吃紧之外,我觉得十分满足。Linux 真好。 |