Linux支持各种类型的命令行工具来自动执行任务,这使得Linux在操作系统中处于领先地位;由于其重要性和用途,它有数百个基于Linux的发行版本,它们确实支持许多命令来自动执行操作。
Ubuntu有一个庞大的命令库,sed命令工具就是其中之一;sed命令可以用来对文本文件进行基本操作,如编辑、删除文件中的文本。
除了这些主要的操作外,sed还提供了一长串支持的选项,可以根据用户的要求对输出进行操作,受此启发,我们编写了一份指南,将展示如何使用sed命令在原始文件中保留更改。
如何使用sed命令在原地编辑文件
sed命令的这一选项用于编辑文件并将更改保存在原始文件中,可用于 sed命令的所有操作。
这个选项的语法描述如下。
语法
sed -i command [file name]
或
sed --in-place command [file name]
在上面给出的语法中,"-i "选项是常数(当你进行文件内修改时),"command "关键字包含使用 sed 命令执行的操作(替换、删除、追加);最后,"文件名 "指向与 sed 命令有关的所有操作的文件名。
我们取了一个文本文件,其中有几行文字。
让我们用下面提到的命令提取 "examp.txt "文件的内容。
$ cat examp.txt
让我们从基本的用法开始,如果我们使用sed而不使用"-i "选项,那么它将在终端打印结果,而原始文件将保持不变(使用 "cat "命令检查),如下所示。
sed命令中原地编辑文件和文件编辑的区别
在下面提到的命令中,"s "被用于替换,它将用 "Ubuntu "替换 "Debian "这个词。此外,这个命令末尾的字母 "g "是全局性的,意味着替换将在整个文件中进行。
$ sed ‘s/Debian/Ubuntu/g’ examp.txt
现在使用同样的命令,加上"-i "选项,如下所示;我们注意到,在"-i "的帮助下,原始文件("examp.txt")中的内容现在也被改变了,如下所示。
注意:你可以使用"-in-place "而不是"-i";这两个选项都有相同的功能。
$ sed -i ‘s/Debian/Ubuntu/g’ examp.txt
如何使用sed命令就地编辑文件的特定行
如果你想改变任何特定行号的内容,那么你可以用 "s "字母添加数值;例如,下面给出的命令将只在第2行用 "Debian "替换 "Ubuntu",一旦你指定了行号,"g "字母的作用就失效了,所以你也可以将其删除。
$ sed -i ‘2s/Ubuntu/Debian/’ examp.txt
此外,你可以把"$"符号和 "s "关键字放在一起,只对文件的最后一行进行修改;就像下面写的命令,在 "examp.txt "的最后一行把 "Ubuntu "替换成 "Linux-Mint"。
$ sed -i ‘$s/Ubuntu/Linux-Mint/’ examp.txt
如何使用sed命令的就地取材删除文件中的一行
如上所述,原地选项在sed命令中有着广泛的用途;除了替换一行中的字以外,还可以使用"-i "选项删除整行并将输出保存在父文件中:下面提到的命令将删除文件 "examp.txt "中第2行。
$ sed -i ‘2d’ examp.txt
如果你想删除除 "2 "行以外的其他行,那么你必须编写下面提到的命令。
$ sed -i ‘2!d’ examp.txt
结论
Ubuntu支持多种命令,可以用来对文本文件进行主要操作,如head或tail命令可以用来打印文本文件的开头或结尾的行。然而,有一些限制,比如说你不能用head命令只打印一个文本文件的第2行(尽管第2行在文件的头部)。sed命令在这方面领先于其他命令;这个命令在Ubuntu中有助于对文本文件进行基本操作,如替换、添加、删除等。据观察,如果使用sed命令,除了"-i "选项,那么结果将只打印在终端。在这篇文章中,详细描述了sed命令的原位选项,并且可以在所有sed操作中采用。