使

使用 Linux Shell 处理文本 - 第 1 部分 sed 的世界

2025-06-07

使用 Linux Shell 处理文本 - 第 1 部分

进入世界sed

进入世界sed

如果您每天都在使用任何 * nix系统,那么您很可能已经熟悉,或者至少听说过该sed命令。

sed(缩写Stream Editor)是一款文本转换工具,每个 Unix 系统都自带。它sed与其他文本编辑器的区别在于其文本操作速度。sed它只对输入文本进行一次处理,因此处理速度更快。

# 替换那些丑陋的文字

sed是一个非常强大的工具,可以用一段文本替换另一段文本。可以使用正则表达式匹配文本。

sed 's/text_to_be_replaced/replacement_text/' file_name

但是,这只会在控制台中打印替换后的文本,而不会更改文件本身。如果我们想将更改保存到文件中,可以使用该-i标志。

sed -i 's/text_to_be_replaced/replacement_text/' file_name

上面的代码只替换每行中给定模式的第一次出现。因此,如果我们想替换该模式的每次出现,我们可以将g参数附加到末尾。

sed 's/text_to_be_replaced/replacement_text/g' file_name

/请注意,我们在以上命令中使用的分隔符不是固定的,我们几乎可以使用任何分隔符sed。例如,

sed 's:text_to_be_replaced:replacement_text:g' file_name


sed 's|text_to_be_replaced|replacement_text|g' file_name

好的,但是如果分隔符本身就是要替换的模式的一部分怎么办?¿ⓧ_ⓧﮌ

好吧,我们可以用反斜杠来转义这个字符。例如,要将单词替换following:below -,我们可以这样做:

sed 's:following\::below - :' file_name

请注意在分隔模式和替换的\:分隔符之前的使用。:

# 删除该剪贴簿留言

sed还允许我们从文件中删除行。该d选项用于指示删除操作。删除行的通用语法是

sed 'Nd' file_name

N是我们要删除的行号。如果我们想删除文件的第 10 行,N那么行号就是 10。

此命令最常见的用途是删除文件中的所有空行。

sed '/^$/d' file_name

上述代码将删除文件中所有空行。正则表达式^$标记空行,d选项指定应删除该行。

不仅如此,我们还可以指定要删除的行范围。

sed 'm,nd' file_name

m上述命令将删除从th 开始到th 的所有行n

# 流水线很重要

那么如何对多个sed命令进行流水线化呢?

我们可以根据需要流水线化任意数量的管道sed,它们将按照指定的顺序进行处理。请考虑以下示例。

echo Linux | sed 's/L/l/' | sed 's/n/N/' | sed 's/l/L/' | sed 's/x/X/'

这将输出LiNuX

最后,我们来看看如何在sed命令中使用变量。到目前为止,我们' '在命令中使用了单引号。但是," "当我们需要在命令中使用表达式时,也可以使用单引号。请看下面的例子。

greet=hello

echo hello shamil | sed "s/$greet/hi" file_name

这将替换评估和的值$greethello用替换hi

# 安全总比后悔好

-i在命令中使用时sed,我们需要小心,因为它会替换文件中的实际内容。(相信我,我已经做过很多次了)

因此,最好先使用此命令而不使用-i任何标志,然后检查替换是否正确。但是,如果文件内容太长而无法通过这种方式检查,则可以使用以下命令创建相同的备份副本,然后修改内容。

sed -i.bak '12,30d' file_name

这将删除从第 12 行到第 30 行的所有行,但最重要的是,它将在修改实际文件之前file_name.bak在同一目录中创建一个

谁知道呢,这也许最终能保住你的工作 (◠﹏◠)

(编辑:有关用法的更多信息,请参阅此评论-i

文章来源:https://dev.to/shamil/processing-text-with-linux-shell---part-1-4ajd
PREV
使用 Linux Shell 处理文本 - 第 2 部分 grep - 轻松搜索大海捞针
NEXT
使用 Nginx 作为反向代理缓存来加速您的网站