如何从文件中删除与定义变量中的字符串完全匹配的行? bash
How to delete a line from a file that matches exactly to a string from a defined variable? bash
我正在编写一个 bash 脚本来以通用格式执行各种操作。最初,脚本首先声明一个设置为文件内容的变量,我们可以将其称为“file1.txt”。
file1.txt 将只包含 1 行,其中 1 行将只有一个整数。预测整数是什么是不可能的。此外,一旦变量设置为该整数,重新读取 file1.txt 以希望将变量重新设置为相同的整数是不可靠的。因此,势在必行,必须在脚本中将整数泛化为变量。
此外,还有另一个文件,我们称之为“file2.txt”,它有很多行,每行都有一个唯一的整数。保证该文件的 1 行且只有 1 行具有与我们设置变量相同的整数。
仅使用设置为该整数的变量,可以使用什么命令从“file2.txt”中删除恰好包含所需整数的行。
我尝试过使用命令 sed 和 auk,但我在将变量用作字符串时遇到了问题。
一个file1.txt的例子:
123
file2.txt 的示例:
456
86454768
35434586745
1231
123
12323
123123
目标是删除与 file2.txt 中的“123”完全匹配的行,在本例中是 file2.txt 中的第 5 行。
我当前的代码:
#This is the only time we can read this file to set the variable
Number="$(cat ./file1.txt)"
#Now we need to remove whatever number $Number is from file2.txt
(unknown command here)
我已经试过awk和sed了,但是没有用。我可能错误地使用了语法。
以下是失败命令的示例:
- awk '$0 != $Number' < ./file2.txt
- awk [ $0 != $Number ] < ./file2.txt
- sed -i '/^$Number$/d' ./file2.txt
- sed -i '/^"$Number"$/d' ./file2.txt
- sed -i '/^(($Number))$/d' ./file2.txt
如有任何帮助,我们将不胜感激!
$ awk 'NR==FNR{a[[=10=]]; next} !([=10=] in a)' file1.txt file2.txt
456
86454768
35434586745
1231
12323
123123
或者如果您在变量中有目标值 number
:
grep -vFx "$number" file2.txt
我正在编写一个 bash 脚本来以通用格式执行各种操作。最初,脚本首先声明一个设置为文件内容的变量,我们可以将其称为“file1.txt”。
file1.txt 将只包含 1 行,其中 1 行将只有一个整数。预测整数是什么是不可能的。此外,一旦变量设置为该整数,重新读取 file1.txt 以希望将变量重新设置为相同的整数是不可靠的。因此,势在必行,必须在脚本中将整数泛化为变量。
此外,还有另一个文件,我们称之为“file2.txt”,它有很多行,每行都有一个唯一的整数。保证该文件的 1 行且只有 1 行具有与我们设置变量相同的整数。
仅使用设置为该整数的变量,可以使用什么命令从“file2.txt”中删除恰好包含所需整数的行。
我尝试过使用命令 sed 和 auk,但我在将变量用作字符串时遇到了问题。
一个file1.txt的例子:
123
file2.txt 的示例:
456
86454768
35434586745
1231
123
12323
123123
目标是删除与 file2.txt 中的“123”完全匹配的行,在本例中是 file2.txt 中的第 5 行。
我当前的代码:
#This is the only time we can read this file to set the variable
Number="$(cat ./file1.txt)"
#Now we need to remove whatever number $Number is from file2.txt
(unknown command here)
我已经试过awk和sed了,但是没有用。我可能错误地使用了语法。 以下是失败命令的示例:
- awk '$0 != $Number' < ./file2.txt
- awk [ $0 != $Number ] < ./file2.txt
- sed -i '/^$Number$/d' ./file2.txt
- sed -i '/^"$Number"$/d' ./file2.txt
- sed -i '/^(($Number))$/d' ./file2.txt
如有任何帮助,我们将不胜感激!
$ awk 'NR==FNR{a[[=10=]]; next} !([=10=] in a)' file1.txt file2.txt
456
86454768
35434586745
1231
12323
123123
或者如果您在变量中有目标值 number
:
grep -vFx "$number" file2.txt