2010-01-28 140 views
28

如何匹配不区分大小写的正则表达式,并在同一时间使用SED删除不区分大小写的匹配线

我读得到不区分大小写匹配删除它,使用标志的“i”

sed -e "/pattern/replace/i" filepath 

,并删除使用d

sed -e "/pattern/d" filepath 

我也看到了,我可以组合多个标志像2iw

我想知道,如果用sed可以结合i和d 我试过以下,但它没有工作

sed -e "/pattern/replace/id" filepath > newfilepath 

回答

41

对于不区分大小写的使用/ I,而不是/我。

sed -e "/pattern/Id" filepath 
+0

啊!有用! 感觉这么笨,大声笑 谢谢! – eruina 2010-01-28 20:18:05

+3

小心:这不是便携式。看到这个评论:http://stackoverflow.com/questions/4412945/case-insensitive-search-replace-with-sed#comment31685516_4412964 – 2016-01-24 07:07:23

1

你也可以使用(g)awk。

# print case insensitive 
awk 'BEGIN{IGNORECASE=1}/pattern/{print}' file 

# replace with case insensitive 
awk 'BEGIN{IGNORECASE=1}/pattern/{gsub(/pattern/,"replacement")}1' file 

或只是与外壳(bash)的

#!/bin/bash 
shopt -s nocasematch 
while read -r line 
do 
    case "$line" in 
     *pattern*) echo $line; 
    esac 
done <"file" 
+0

唯一的事情是......它保持行被删除。所以:'awk'BEGIN {IGNORECASE = 1}!/ pattern/{print}'文件' – 2018-02-03 05:00:14