首页 > 解决方案 > 如何在 bash 脚本中读取文件时删除 1 个或多个匹配行

问题描述

我想使用 bash 脚本读取文件并删除与我的特定场景匹配的行(以“z”开头的行)。如果“inputFile”仅包含字母字符,我的代码可以正常工作。但是,如果一行带有“sed 的特定字符”(例如:z-2.10.3.2 x/y/z F (&)[]+* 行),那么我得到一个错误,(错误:sed:-e 表达式# 1,字符 29:未终止的 'y' 命令)。

#!/bin/bash

inputFile="test.txt"

while IFS= read -r line
do
  echo "$line"
  if [[ $line == z* ]];
  then
    sed -i "/$line/d" $inputFile
  fi

done < "$inputFile"

我想删除 'z-2.10.3.2 x/y/z F (&)[]+*' 之类的行,我该怎么做...?

标签: linuxbashshellscripting

解决方案


正如您提到的,您不需要具有z*

只需使用grep -v

grep -vE "^[[:blank:]]*z" file 

我创建了一个场景,其中我有一个文件,其中包含

root@ubuntu:~/T/e/s/t# cat file
hello world

sample line 1

sample line 2 world

sample line 3

sample line 4

就我而言,我想删除包含“世界”的行

root@ubuntu:~/T/e/s/t# grep -v "world" file

sample line 1


sample line 3

sample line 4

如果需要,可以将输出重定向到另一个文件中。


推荐阅读