sed awk 这俩丑陋的东西,还有必要学么?

2015-01-10 16:19:22 +08:00
 otmb

碰到这货10年了,见到这俩,仍然感到十分恶心,不愿去学,
想问下大神,这俩还有必要学么:)

15437 次点击
所在节点    程序员
86 条回复
est
2015-01-10 19:52:20 +08:00
@Sunyanzi bat免安装。exe要安装啊。

问题是你找一个不带perl的发行版试试?

同样的事,perl 也能做。sed awk grep不能做的perl也能做。凭啥不用perl。
besto
2015-01-10 20:03:00 +08:00
@est 可perl的缺点就是比这两货还丑23333
uuspider
2015-01-10 20:09:00 +08:00
这两个东西,对着文档练练手,也用不了多长时间吧。

码农还怕丑陋?还怕“又臭又长”?
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
sc
2015-01-10 20:10:43 +08:00
@KDr2 握爪
KentY
2015-01-10 20:23:27 +08:00
@lululau 如果不清楚正则,不知道什么时候该转意,什么时候不用,那和awk,sed没关系,是对正则知识的欠缺,不补早晚有天会暴露。而且对它不了解,使用上也得不到精妙。

BTW,你说的那些不同的语法,其实是bre,ere,pcre的区别
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
treo
2015-01-10 20:59:34 +08:00
如果都10年了还没学,说明你没必要学,学了也记不住,这俩东西学习曲线太陡,一个月不碰就得重新翻man。现在还学这个的也就剩下运维和*nix狂热爱好者了吧
zxdy
2015-01-10 21:12:12 +08:00
@otmb 用了grep+sed,后来用截取字符串的办法处理每行,效率有了大概9倍的提升,但是经过测试发现实现的效率会随着日志变大而越来越低,可能是shell对大文件读取写入的IO有瓶颈,于是最后用了awk+sed,效果比较明显
kotokz
2015-01-10 21:18:49 +08:00
sed效率很一般,直接用perl吧
Tinet
2015-01-10 21:33:10 +08:00
居然说这两东西丑,在没有深入学习之前请不要这样说
faywong8888
2015-01-10 21:39:25 +08:00
开房数据盛传之时下载了数据库文件,看了一天sqlserver怎么导入最终搞不定。之后在cygwin下awk一下就搞定了。
Bruta
2015-01-10 22:03:40 +08:00
这两个都是神器啊…
anguskwan
2015-01-10 22:15:49 +08:00
还有比这更性感的么。。。
FatGhosta
2015-01-10 22:18:55 +08:00
我怎么觉得awk和sed是两个神器呢。。。
Tink
2015-01-10 22:18:57 +08:00
我只会sed,但是我知道这俩货太有用了
love
2015-01-10 22:33:10 +08:00
虽然写过很多bash脚本,但这二货只会用一点点,也不想去学了。现在写复杂的脚本直接上python了,又易调试又好写。
reverland
2015-01-10 22:38:39 +08:00
有些地方……没有python啊。
编译个python比编译个awk,sed费事些
semicircle21
2015-01-10 23:11:57 +08:00
perl python 什么的都能替代, 仅在不能使用这些语言的时候有用, 我能想到两种情况:
1. 嵌入式: 空间紧张.
2. 面向很多机器的场景, 每个 image 少个 python, 整体就能省下很多了.
这种东西实在没必要勉强学, 用到的时候就学, 用过了就自然忘~
YORYOR
2015-01-10 23:39:25 +08:00
没想好怎么喷楼主,只跟windows打交道吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/160899

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX