使用sed删除不区分大小写的匹配行

时间:2010-01-28 19:22:27

标签: sed case-insensitive

如何匹配不区分大小写的正则表达式并同时将其删除

我读到要获得不区分大小写的匹配项,请使用标记“i”

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

并删除使用d

sed -e "/pattern/d" filepath

我还读到我可以组合多个标志,如2iw

我想知道sed是否可以将i和d结合起来 我尝试过以下但是没有用

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

3 个答案:

答案 0 :(得分:48)

对于不区分大小写的使用/I而不是/i

sed -e "/pattern/Id" filepath

答案 1 :(得分: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

或者只是shell(bash)

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

答案 2 :(得分:0)

我制作这个单行是因为 Ansible 无法处理同名的不同 lv。这将接近 CSV 转换为完美的 JSON。可能您想更改 -F 标志以更改字段分隔符。

lvs | perl -ane '
   local %tmp,$i=0;
   while($i<@f){
     $tmp{$f[$i]}=$F[$i] if $F[$i];
     $i++
   };
   if(@f){push @ans,\%tmp}
   else{ @f=@F }; 
   END { print to_json(\@ans,{pretty=>1}) }
' -MJSON