代码之家  ›  专栏  ›  技术社区  ›  justaguy

sed删除带图案且以奇数结尾的行

sed
  •  1
  • justaguy  · 技术社区  · 1 年前

    sed 下面我正在尝试删除所有具有 ID_ 并以奇数结尾。这两个命令都执行,但返回的文件保持不变。谢谢:)。

    文件

    ID_0111 xxx
    ID_0112 xxx
    ID_0113 xxx
    ID_0114 xxx
    xxxxxxxxxxxxxxxx
    

    渴望的

    ID_0112 xxx
    ID_0114 xxx
    xxxxxxxxxxxxxxxx
    

    sed

    sed '/ID_[13579]/d' file.txt
    sed 's|ID_[13579]$| |g'
    
    2 回复  |  直到 1 年前
        1
  •  2
  •   anubhava    1 年前

    您可以使用此 sed :

    sed '/^ID_[^ ]*[13579] /d' file
    
    ID_0112 xxx
    ID_0114 xxx
    xxxxxxxxxxxxxxxx
    

    此处为regex模式 /^ID_[^ ]*[13579] / 匹配以开头的行 ID_ 后跟0个或多个非空格字符,并以结尾 [13579] 在匹配空间之前。

    或者,使用 awk 你可以这样做:

    awk '$1 !~ /^ID_/ || $1 ~ /[02468]$/' file
    
    ID_0112 xxx
    ID_0114 xxx
    xxxxxxxxxxxxxxxx
    
        2
  •  2
  •   choroba    1 年前

    奇数前面可以有任何数字,奇数后面必须有空格。

    sed '/ID_[0-9]*[13579] /d'