UnixAgain

热爱Unix及相关的一切

博客园 首页 联系 订阅 管理

这个做法是有问题的,会导致不应该有换行符的每一行都加上一个指定的换行符。待我再研究一下。

今天 在处理一堆SQL文件时遇到了这个问题。

首先是分隔符的问题,我遇到的两个分隔符一个是"`"(反引号)和"'"(单引号)。这两个都是奇葩。先在这里指出。

分别是

awk -F"'" 'BEGIN{OFS="'\''"}{....}' filename

awk -F"\`" 'BEGIN{OFS="`"}{...}' filename

注意单引号的情况是要在目标功能是转义的反斜杠的左右两边各加一个单引号。

然后就是主要问题了,我是要把一个sql文件的指定行和指定列的内容全部小写。awk是不支持sed -i那种inplace模式 的,只能替换。

注意:操作有风险,最好先备份。

awk -F"'" 'BEGIN{OFS="'\''"}{if (NR>=3 && NR<=20) {tmp=tolower($2); $2=tmp;}; print $0}' filename > tmpfile

这样还是把改变后的内容重定向到了指定文件,检查无误后再用这个文件覆盖原文件。

 

可能有些同学看不明白,为什么前面已经指定了-F也就是分隔符了,为什么还要指定OFS呢?这是因为在后面用了print $0,如果不指定,那么会默认使用awk内建的分隔符,也就是空格来输出,你就会惊奇的发现原来的"'"都变成了空格。

至于其他问题,应该可以很容易通过搜索找到答案了。

 

posted on 2014-09-29 17:32  UnixAgain  阅读(4834)  评论(0编辑  收藏  举报