如何使用sed删除特殊字符

1,139 阅读3分钟

Sed命令是一个Linux工具,可以用来执行很多操作,包括插入和删除操作,查找/搜索和替换操作。sed命令允许Linux用户在不直接打开文件的情况下编辑和应用一些功能。sed命令支持从初级到高级的各种编辑功能。例如,在一个文本文件中,这些操作可以在几种数据类型上执行:字符、数字、特殊字符、字母数字等。

考虑到sed命令的重要性,我们今天的指南将探讨在Ubuntu中使用sed命令删除特殊字符的几种方法。

sed命令的语法写在下面。

语法

sed [options] command [file name]

特殊字符有时可能是写在文本文件中的内容的需要,但如果不必要地使用它们,它们会使文件变得混乱,而且有可能使读者不注意,从而导致一个没有目的的文件。

如何在Ubuntu中使用sed来删除特殊字符

本节将简要介绍使用sed删除文本文件中的特殊字符的方法;这取决于你想删除的文件中的字符数量;在删除文件中的字符时有两种可能,要么你想删除单个特殊字符,要么你想一次删除多个字符。从上面指出的这些可能性中,我们将本节扩展为两种方法,以解决这两种可能性。

方法1:如何使用sed删除单个字符

方法2:如何使用sed一次删除多个字符


第一种方法解决的是第一种可能性,第二种可能性将在方法二中讨论,让我们逐一来挖掘它们。

方法一:如何用sed删除单个特殊字符

我们创建了一个文本文件 "ch.txt",该文件在不同的行中包含了一些特殊字符;该文件内的内容显示如下。

$ cat ch.txt

你可以注意到,"ch.txt"中的内容很难阅读;例如,我们想从文本文件中删除字符 "#";为此,我们必须使用以下命令来删除整个文件中的 "#"。

$ sed ‘s/\#//g’ ch.txt

此外,如果你想从特定的行中删除特殊字符;为此,你必须在 "s "关键字旁边插入行号,下面提到的命令将只从第3行删除 "#"。

$ sed ‘3s/\#//g’ ch.txt

方法2:如何使用sed一次删除多个字符

现在我们有另一个文件 "file.txt",其中包含不止一种类型的字符,我们想一次性删除它们。在这个方法中,语法与上面的命令有一点变化;例如,我们要从 "file.txt"中删除五个字符 "#$%*@"。

首先,看一下 "file.txt"的内容,因为这些字被这些字符打断了。

$ cat file.txt

下面的命令将有助于从 "file.txt"中删除所有这些特殊字符。

$ seds/[#$%*@]//g’ file.txt

这里我们可以举另一个例子,假设我们只想从特定的行中删除一些字符。

我们已经创建了一个新的文件,"newfile.txt"的内容如下所示。

$ cat newfile.txt

为此,我们写了一条命令,分别从 "newfile.txt"的第二行和第三行删除 "#@"和"%*"。

$ sed ‘2s/[#@]//g; 3s/[%*]//g’ newfile.txt

上述方法中使用的sed命令将只在终端显示结果,而不是在文本文件中应用变化:为此,我们必须使用sed命令的"-i "选项。它可以与任何sed命令一起使用,其变化将被显示在文件中而不是打印在终端上。

结论

显然,sed命令就像一个普通的文本编辑器,但与其他编辑器相比,它有一个更广泛的操作列表。你只需要写一个命令,就会自动进行修改;这个特点吸引了Linux爱好者或喜欢终端而不是GUI的用户。在sed的优势功能之后,我们的指南侧重于从文本文件中删除特殊字符。如果我们把 sed 命令的这一功能与其他编辑器进行比较,你必须在整个文件中搜索字符,然后一个一个地删除它们,这是一个繁琐的过程。另一方面,sed通过在终端写一个单行命令来完成同样的操作。