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

发布于 2024-08-19 04:39:45 字数 354 浏览 9 评论 0原文

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

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

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

并删除 use d

sed -e "/pattern/d" filepath

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

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

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

How do I match a case insensitive regex and delete it at the same time

I read that to get case insensitive matches, use the flag "i"

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

and to delete use d

sed -e "/pattern/d" filepath

I've also read that I could combine multiple flags like 2iw

I'd like to know if sed could combine both i and d
I've tried the following but it didn't work

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

笙痞 2024-08-26 04:39:46

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

sed -e "/pattern/Id" filepath

For case-insensitive use /I instead of /i.

sed -e "/pattern/Id" filepath
ま柒月 2024-08-26 04:39:46

您也可以使用 (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"

you can use (g)awk as well.

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

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

OR just with the shell(bash)

#!/bin/bash
shopt -s nocasematch
while read -r line
do
    case "$line" in
        *pattern* ) echo $line;
    esac
done <"file"
变身佩奇 2024-08-26 04:39:46

我制作了这一行,因为 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

I produced this one-liner because Ansible cannot handle different lv with the same name. This convert near CSV into perfect JSON. Possibly, you want to change the -F flag to change the field separator.

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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文