任务很简单。 您必须从 Linux 终端中的文本文件中删除特定行。
您可以使用 Vim 或 Nano 等文本编辑器,输入文件并删除所需的行。 但是,这种方法不适合自动化使用 bash 脚本。
相反,您可以使用强大的 sed 命令行编辑器并删除符合特定条件的行。 当然,您可以在 shell 脚本中使用 sed。
让我展示几个用例。
⚠️此处显示的示例将立即修改原始文件。 在开始试验之前备份该文件是个好主意。
从文件中删除第 n 行
想象一下,您必须删除文件中的第 7 行号。 您可以像这样使用 sed 命令:
sed -i '7d' filename
让我解释一下它是如何工作的:
-i
:此选项启用就地编辑。 默认情况下,sed 只会显示输出。 有了这个-i
选项,它会修改实际文件而不在显示器上显示。7d
: 这里 7 是行号和d
指示删除该行。filename
: 这是你要修改的文件。 如果文件位于其他目录中,您还可以提供绝对或相对路径。
让我展示一个真实的 example. 这是一个名为 agatha.txt 的示例文本文件:
The Mystery of the Blue Train
The Seven Dials Mystery
The Murder at the Vicarage
Giant's Bread
The Floating Admiral
The Sittaford Mystery
Peril at End House
Lord Edgware Dies
要从此文件中删除第 4 行,我使用:
sed '4d' agatha.txt
这将导致以下显示删除了“Giant’s Bread”行:
The Mystery of the Blue Train
The Seven Dials Mystery
The Murder at the Vicarage
The Floating Admiral
The Sittaford Mystery
Peril at End House
Lord Edgware Dies
现在,假设您想在 Linux 命令行中删除文件的第一行。 像这样使用 sed:
sed -i '1d' filename
?如果您想在不修改文件本身的情况下查看操作结果,请不要使用 -i
sed 命令的选项。
使用 sed 删除最后一行
您学会了删除特定行,但如果您需要删除最后一行怎么办?
您可能总是使用 wc 命令获取文件中的总行数,并将此数字与 sed 一起使用。 但是,sed 有一种删除文件最后一行的专用方法。 您现在不必再担心文件的数量了。
sed -i '$d' filename.txt
删除一系列行
与您之前看到的类似,您也可以从文件中删除一系列行。
假设您必须删除从 11 到 15 的行,您可以提供这样的范围:
sed -i '11,15d' filename
请注意,它还将删除第 11 行和第 15 行,而不仅仅是位于它们之间的行。
删除包含字符串的行
您还可以使用 sed 删除包含给定字符串或匹配特定模式的所有行。
下面的命令将删除所有包含单词 ‘string’ 的行:
sed -i '/string/d' filename
请注意,这是一个区分大小写的搜索。 您也可以使用正则表达式模式而不是常规字符串。
删除以单词开头的行
如果要删除以特定单词或字母开头的所有行,则只需提供如下正则表达式模式:
sed -i '/^word/d' filename
额外提示:删除所有空行
在结束本文之前,让我快速分享一下如何使用 sed 删除所有空行:
sed -i '/^$/d' filename
我希望您发现这个快速提示有助于从 Linux 命令行中的文本文件中删除行。
如果您有兴趣,请在 sed 命令行编辑器上了解更多信息: