- 论坛徽章:
- 16
|
可能由于历史原因,当时shell种类众多,现在差不多是linux/GNU一统天下的时代,所以众多考古问题,比如pdksh,这个估计没几个人能接触到吧。所以做不出来也无所谓,很多题目可能现在看来是博君一笑而已。比如各种shell的Homepage,现在看来完全没有意义,google就好了。比如,shell 变量名长度,我敢说肯定超过30 字节,至于多少我也不知道,但实际工作中的shell谁会写这么长的名字呢?完全是考古罢了,好比知道茴香豆的四种写法一样,工作中知道一个行,至于diff写一个svn,这完全是极品geek的做法啊 ,但完全不具实际意义。否则svn/perforce/等厂商都要倒闭了。如我上述,姑且一笑罢了。
个人感觉有几个还值得一看,根据个人浅见解答如下,欢迎探讨,
- cmd >a 2>a 和 cmd >a 2>&1 为什么不同?
- 1.cmd的错误输出到a,2的由于2>&1,错误和标准输出都到a,
- 当 while read .. 这样的语句用于 pipe 右侧时,需注意什么?
- 参见waker的新手导航
- shell 中含有大量文档.不想在每行之前用 # 注释. 有那两种方法可以实现?
- :<<comment
- your code
- comment
- 或者if [ 0 -eq 0 ] ;then
- echo 'comment here'
- #### your code
- fi
- sed把每个词的首字母换成大写,
- sed 's/\b[a-z]/\U&/g'
- \b来指定边界
- sed是greedy match,如何实现lazy match ?
- 不好表达,就是尽可能的把regexp匹配你要提取的内容,同时把regexp匹配其他的部分用另外的字符或regexp来约束。
- 比如# echo "<b>foo</b>bar" | sed 's/<.*>//g'
- bar
- <>里面的.*匹配了<b>foo</b>这部分,正是greedy match的,它尽可可能的匹配最多。
- echo "<b>foo</b>bar" | sed 's/<[^>]*>//g'
- foobar
- 限定了匹配条件<>里面是非>开头的部分,这样准确匹配了2个html的标签。
- 实现了lazy match.
- 1. awk, oawk, nawk, gawk, mawk 有什么区别?
- 手册有,记不清了,主要是函数以及对GNU的支持与否,还有regexp有区别
- 3. awk -F"" 与 awk -F "" 有区别吗?
- 第一个会报错,第二个是每个字符作为一个域,第一个是什么看不懂
- 4. 可以这样设置 FS 吗?
- FS = "[ \t]+\|[ \t]+"
- 可以,但会有warning, \是多余的,GNU的awk会有一个warning,把|当做普通字符,因为\不需要转义,手册有介绍
- 5. gawk 有一个扩展表达式与其他 GNU 工具不同, 是哪个, 为什么?
- 手册有,不过该题有什么意义呢?完全为了考古?
- 6. 那两种方法可以实现大小写无关匹配?
- gnu的awk 有个IGNORECASE,打开即可或者[a-zA-Z]
- 7. 下列两句有何区别?
- awk '$0 ~ "[ \t\n]"'
- awk '$0 ~ /[ \t\n]/'
- 第一个匹配字符(字符是空格,\t,\n和[]),第二个匹配是regexp
- 8. FS=" " 和 FS=" +" 有何区别?
- 第一个连续的空格/tab/newline做FS, 多个(>1)空格做FS
- 9. 如何将每一个字符作为一个 field ?
- 设FS=""
- 10. 如何将整个文件作为一个 field ?
- FS="\n" 或者设一个未在record出现的字符做FS即可,比如record是 a b cd ,那FS不是abcd和空格\n之一就可以了。
- 11. RS="" 与 RS="\n\n+" 有何区别?
- 打字太累,参见Tim的awk的心得
- 12. NR 和 FNR 有何区别?
- 懒得打字了,FNR是不会累加的。。。
- 13. getline < "file" 改变那些 builtin 变量?
- 懒得看了,手册有
- 14. 如何不打印最后一个 field? (不用循环)
- awk 'NF{NF-=1}1' file ,有人喜欢用NF="",这个不对的,这里是把该域设为空,print NF会发现NF并未减少。
- 18. 如何将 awk 中得到的值赋给 shell 变量.
- eval 或者``和$()
-
复制代码 |
|