在这里遇到麻烦,我需要搜索一个模式,然后从一个单独的文件中删除其包含的整行。
例如,如果我在包含以下内容的文件中搜索“ 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
;;
答案 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
并将输出重定向到另一个文件。