這個做法是有問題的,會導致不應該有換行符的每一行都加上一個指定的換行符。待我再研究一下。
今天 在處理一堆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內建的分隔符,也就是空格來輸出,你就會驚奇的發現原來的"'"都變成了空格。
至於其他問題,應該可以很容易通過搜索找到答案了。