Linux 如何在读取bash脚本中的文件时删除1行或多行匹配行

Linux 如何在读取bash脚本中的文件时删除1行或多行匹配行,linux,bash,shell,scripting,Linux,Bash,Shell,Scripting,我想使用bash脚本读取文件并删除与我的特定场景匹配的行(以“z”开头的行)。 如果“inputFile”只包含字母字符,则我的代码可以正常工作。 但是,如果一行带有“sed的特定字符”(行例如:z-2.10.3.2 x/y/z F(&)[]+*),那么我得到了一个错误,(错误:sed:-e表达式#1,char 29:未终止的“y”命令) #/bin/bash inputFile=“test.txt” 而IFS=读取-r行 做 回音“$line” 如果[[$line==z*]; 然后 sed-i

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

#/bin/bash
inputFile=“test.txt”
而IFS=读取-r行
做
回音“$line”
如果[[$line==z*];
然后
sed-i“/$line/d”$inputFile
fi
完成<“$inputFile”

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

正如您所提到的,您不需要有
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
在我的例子中,我想删除包含“world”的行


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

我建议使用
bash
sed
进行重定向,但不能同时使用这两种方法。
awk'/^z/'文件
grep-v'^z'文件
sed-n'/^z/!p'文件
。。。或者
sed'/^z/d'文件
。我想对该文件行执行一些任务,所以我需要在bash中执行。主要的是,我需要在使用“$line”逐行读取文件时删除一些行。(关键点)第二个重复提示完全避免shell循环,并将所有命令组合成一个
sed
脚本。有许多副本详细阐述了tnis的思想,使用
sed
从字符串文件创建
sed
脚本。我将尝试找到一个好的第三个副本,它精确地显示了如何执行该操作。我想对该文件行执行一些任务,因此我需要在bash中执行该操作。主要的是,我需要在使用变量“$line”逐行读取文件时删除一些行。(关键点)您希望执行哪种操作?提供更多细节。或者您可以只提及示例输入和示例输出。我的实际目的是比较两个文件并从两个文件中删除公用行。(行号可能不同,但两个文件中的行内容相同)。有没有直接的方法…?试试diff t1 t2 | grep-E“”| sed的///g'我想这会解决你的问题。如果你不想合并。您可以用两个不同的命令grep“”。@yasaramalshan您应该在问题中陈述您的实际目标,而不是创建一个。
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