为什么老感觉 awk/sed 这一类工具很难用, 用起来很痛苦?

2016/12/7

问题

  1. 语法记不住

  2. 特殊变量记不住(NR之类的, 这让我想到了bash中的$# $@这一类的变量, 真的很难记住)

  3. 忘记得很快

  4. 其他...

实践得少还情有可原, 但是也用了有一段时间了, 老感觉用它们有点痛苦.
使用它们, 老让自己产生自我怀疑, 工具不应当是这样的

上下文环境

  1. linux

  2. gawk gsed

尝试解决

阅读 7.2k
4 个回答

因为的确很难用,用起来的确很痛苦啊。

到现在我也只会一些简单的awk和sed用法。
我把awk当成高级版的cut来用了,偶尔用来算数字总和也还行,要用到NR之类的话,与其查表,不如正正经经写脚本语言。
sed就单纯用来取代字符了,什么pattern space hold space之类的,堪比brainfuck编程。

从一个方向想,就算是用起来这么痛苦的工具,用多了也自然就习惯了。
但从另一个方向想,就算是要写比较多字的Python / Ruby / Perl等语言,写多了也自然就快了。
那我干嘛不选后者呢……

举一个刚刚别人的问题的例子,有一个变量 a='C1 AC_REG,C8 ARR_RUNW,C10 30FT_TO_TD,C4 TIME,C6 DEP_RUNW,C5 ORIGIN,C3 DATE,C7 DESTINATION,C2 FLIGHT_NUM' 他希望将所有的C数字+空格都去掉,剩下AC_REG,ARR_RUNW,30FT_TO_TD,TIME,DEP_RUNW,ORIGIN,DATE,DESTINATION,FLIGHT_NUM
当然这问题用任何语言都能处理,也不复杂。但用awk和sed这类的工具意义就在于,它们能更快速的解决问题:echo $a|sed -r 's/C[0-9]{1,2} //g'
至于说特殊变量或者命令记不住,其实最好的办法就是,简单的文本处理问题多多练习,试着从不同的角度去想解决办法。实践多了就都记住了。

sed 1974
awk 1977
perl 198?

他们都是文本处理工具(或语言),存在这么久自然有他的道理,首先语法并不复杂,只是你不熟悉。

为什么容易忘记,你不常用当然就会忘记。

变量名难记?如果你知道awk的record(行)和filed(列)概念,什么NR,NF这些应该就很好记了吧?
NUMBER OF RECORDS, NUMBER OF FIELDS

如果你的工作天天各种文本处理,你自然就会喜欢这些东西。

awk对于perl或者python这些语言当然没有什么优势,但是它简单啊,很多类unix系统都自带啊,perl和python并不敢说每个发行版都有吧?

另外他们存在这么长时间,有一个共识问题,有些问题大家自然而然就会想到awk该怎么解决。

so,以上给出一些不同的意见

宣传栏