40

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

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

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

并删除使用 d

sed -e "/pattern/d" filepath

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

我想知道 sed 是否可以同时结合 i 和 d 我尝试了以下方法,但没有成功

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

3 回答 3

65

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

sed -e "/pattern/Id" filepath
于 2010-01-28T19:31:53.083 回答
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"
于 2010-01-29T00:00:24.000 回答
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
于 2021-03-02T15:58:33.617 回答