在Linux上使用sed流编辑器的指南

在Linux上使用sed流编辑器的指南

简介

Sed ,也被称为 ” 流编辑器 “,是 Linux 上的一个强大的命令行工具,它允许你在输入流(无论是文件还是来自管道的输入)上执行基本的文本转换。 Sed 在对大量文件进行批量修改,或编辑难以用文本编辑器打开的文件时特别有用。本指南将作为 sed 的详细介绍,包括它的语法,基本命令,以及在不同情况下使用 sed 的例子。我们还将探讨高级功能,如分组和就地编辑,以帮助你掌握这个多功能的工具。

语法

sed 命令的基本 语法 如下– 1.

$ sed 'command' file

命令周围的单引号 很重要 ,因为它们使 sed 能够正确地解释命令。文件是 sed 要操作的输入文件。Sed 也可以接受来自管道的输入,在这种情况下,文件参数是不需要的。

命令

替换

sed最常见的用途之一是做 替换。 代替命令是由’s’命令表示的。基本语法如下 –

$ sed 's/old-text/new-text/' file

例如,要将一个名为 “file.txt “的文件中所有出现的 “旧 “字替换为 “新 “字,请使用以下命令

$ sed 's/old/new/' file.txt

删除行

另一个有用的命令是d命令,它用于删除与某种模式相匹配的行。For example, to remove all lines containing the word “remove” in a file named “file.txt”, use the following command −

$ sed '/delete/d' file.txt

插入和追加

a “命令用于在特定行后插入文本。例如,要在一个名为 “file.txt “的文件的第五行后插入 “new “一词,使用以下命令。

$ sed '5a new' file.txt

i “命令用于在特定行前插入文本。例如,要在一个名为 “file.txt “的文件的第五行前插入 “new “一词,请使用以下命令。

$ sed '5i new' file.txt

单个sed命令

让我们通过学习运行sed命令的不同方法来实践我们到目前为止所获得的知识。首先,让我们看看如何在Unix shell中运行一个单一的 sed 命令。

$ sed [-Ealn] [-i extension] command [file ...]

除了编辑文件的内容,我们还应该能够查看它们。让我们看看如何使用print函数并执行相应的 sed 命令 —

$ sed 'p' input.txt
line-1
line-1
line-2
line-2

我们可以看到,当明确使用打印函数时,每一行都被打印了两次。这是因为 sed 总是在所有命令执行完毕后执行一个默认动作,即打印每一行。另外,为了抑制这种默认行为,我们可以在同一命令中使用-n标志,并将事情置于我们的控制之下 –

$ % sed -n 'p' input.txt
line-1
line-2

多个sed命令

由于搜索是处理文本的关键,如果我们能用自己的sed命令实现这种能力,那不是很好吗?是的,这是很有可能的!

所以,让我们继续使用sed来获取我们的input.txt文件中包含 “line “一词的第一行-

$ sed -n -e '/line/ p' -e '/line/ q' input.txt
line-1

我们应该注意使用 ” -e ” 标志来分隔 sed 命令。第一条命令找到了模式,并使用print函数来打印该行。而第二条命令利用了 q 函数,退出后会中断输入流上sed命令的执行。如果没有 q 函数,sed将打印所有符合正则表达式的行。

另外,我们也可以用分号来分隔多个命令 –

$ sed -n '/line/ p; /line/ q' input.txt
line-1

用sed查找和替换

sed 提供了各种函数,我们可以用它们来查找和替换文本。让我们来探索几个重要的功能。

基本替换

假设我们的团队遵循一个惯例,使用空格进行代码缩进。然而,我们经常最终使用制表符。结果,我们的同事经常要求我们在代码审查周期内将制表符改为空格。为了解决这个用例,我们可以使用替换函数:

[address[,address]]s/regular expression/replacement/flags

因此,替换函数会在从地址范围中选择的每一行上搜索正则表达式。然后,它只用替换字符串替换第一个匹配的子串,除非我们用一个标志来覆盖这个默认行为。由于我们打算重复使用我们的解决方案,让我们在一个名为 “indentation_fix.sed “的脚本中添加我们的 sed 命令-

/^[ ]+/ s/ / /g

用Pooling替换

有时我们经常需要在代码中进行语法修正。让我们举一个例子,在访问Java字符串中的字符时,我们错误地将其视为一个数组,就像许多其他编程语言(如 C )中的情况一样—-。

String name = "string";
if (name.length() > 0) {
   System.out.println("Name starts with " + name[0]);
}

相反,我们应该使用 charAt() 方法来访问0位置的字符。 由于我们可能在文件中的多个地方出现这种错误,我们可以通过使用sed来为我们做这种改变来节省时间。

$ sed -i 's/(name)[ ]*[[ ]*]/\1.charAt(0)/g' input.txt

这个命令使用池子来匹配整个模式 ” name[0] ” 并用 ” name.charAt(0 )” 替换它。

结论

总之, sed 是一个编辑文本流的强大工具。它有广泛的匹配和替换文本的功能,使它适合于各种使用情况。通过本指南,我们了解了使用 sed 的基本知识,以及如何在不同的场景下运行命令,包括替换、删除、插入和添加。我们还探讨了高级功能,如分组和就地编辑,以帮助你掌握使用这个多功能工具。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程