案例:查找文件中不是Cancel/Stop/Cancel BOX这几个关键字的列 

要求:不区分大小写,忽略前后中间空格

文件格式:

luosea # head aaaaaa201701-03.csv
8148827550,20170201000216,CANCEL BOX,,
8034541493,20170201000242,CANCLE,,
9034652099,20170201004106,ST0P,,
9069089216,20170201000126,cancle,,
7069659380,20170201005216,STOP,,
9037220900,20170201005230,STOP,,
8032453482,20170201005316,STOP,,

处理方法:

1、使用sed 转化文件,

sed -i 's/,/|/1' aaaaaa201701-03.csv
sed -i 's/,/|/2' aaaaaa201701-03.csv
sed -i 's/,//g' aaaaaa201701-03.csv

转换后的文件格式:

luosea #  head aaaaaa201701-03.csv
8148827550|20170201000216|CANCEL BOX
8034541493|20170201000242|CANCLE
9034652099|20170201004106|ST0P
9069089216|20170201000126|cancle
7069659380|20170201005216|STOP
9037220900|20170201005230|STOP
8032453482|20170201005316|STOP
8164895345|20170201005318|STOP
8105197779|20170201000015|Stop
8064349047|20170201001958|Stop stealin

习惯问题,将该文件重命名  

mv aaaaaa201701-03.csv luosea.txt

为避免格式不一致,将文件由dos格式转化为linux格式

luosea # dos2unix luosea.txt
然后使用AWK 处理就行了
awk -F "|" '$3 !~/^[[:blank:]]*[sS][tT][oO][pP][[:blank:]]*$/ && $3 !~/^[[:blank:]]*[cC][aA][nN][cC][eE][lL][[:blank:]]*$/ && $3 !~/^[[:blank:]]*[cC][aA][nN][cC][eE][lL][[:blank:]]*[bB][oO][xX][[:blank:]]*$/ {print $0}' luosea.txt > result.txt

解释下:

1、awk -F "|"  就是以"|" 作为分隔符

2、'$3 !~/^[[:blank:]]*[sS][tT][oO][pP][[:blank:]]*$/     !~表示不匹配,

3、^[[:blank:]]*开头存在或者不存在空格匹配,

4、[sS][tT][oO][pP]表示不区分大小写匹配stop,

5、[[:blank:]]*$表示忽略结尾的空格 ,再加上前面的不匹配,就是不区分大小写忽略空格不匹配stop 。

6、^ 表里开始字符  $ 结束字符 。  其他类似 。

最后得出结果就是去除关键字的了

luosea # head result.txt 
8034541493|20170201000242|CANCLE
9034652099|20170201004106|ST0P
9069089216|20170201000126|cancle
8064349047|20170201001958|Stop stealing
8106812512|20170201062023|Call me now.STOP
9069570059|20170201062541| Cancle Box
7063027423|20170201062956|STOP calle feel
8144895412|20170201064339|Cancil
7032251500|20170201065432|text CANCEL BOX
8106812512|20170201064517|Call me now.STOP
luosea #