搜索模式并删除包含该模式的整行

时间:2019-12-06 22:20:27

标签: bash unix

在这里遇到麻烦,我需要搜索一个模式,然后从一个单独的文件中删除其包含的整行。

例如,如果我在包含以下内容的文件中搜索“ mike”

迈克:24

sally:12

chris:54

它将删除麦克的整行

这里是我到目前为止的脚本

clear
        tput cup 2 5; echo "Enter pattern to search record(s) to be deleted: "
        tput cup 2 55; read pattern
        tput cup 4 5; printf "Following records found:\n"
        cat  $fileName | grep -i "$pattern"
        printf "Do you want to delete (yes/no): "
        read choice
        case "$choice" in
            yes|Yes)
            echo "$r1 Deleting records $r2"
            echo "$(grep -v "$pattern" $fileName)" > $fileName
            ;;
            *)  echo "Returning.."
            ;;
        esac
        ;;

2 个答案:

答案 0 :(得分:1)

带有-i选项的'sed'命令将在适当位置编辑文件:

sed -i "/mike/d"  $fileName 

将删除$ filename中所有包含'mike'的行。 sed还提供了一些强大的编辑模式,例如删除定界符之间的行等。

编辑1:与bash变量一起使用:

# REGEX example for mike and Mike anchored to beginning of line
# Any simple string or REGEX pattern will work
export pattern="^[mM]ike"   
sed -i "/${pattern}/d" $fileName

之前的$ fileName:

James Jones
Mike Jones
mike Jones
Mikeala Jones
Mary Jones
Mary Mike

$ fileName之后:

James Jones
Mary Jones
Mary Mike

最后一行仍然存在,因为'^'将模式锚定到该行的开头,而Mike不在最后一行的行首

还请注意,该模式不包含匹配Mikeala的空间

答案 1 :(得分:0)

您可以使用以下命令轻松执行此操作:

grep -v "mike" filename

并将输出重定向到另一个文件。