sed替换命令

合集下载

Linux命令高级技巧使用sed命令进行正则表达式替换和编辑

Linux命令高级技巧使用sed命令进行正则表达式替换和编辑

Linux命令高级技巧使用sed命令进行正则表达式替换和编辑Linux命令高级技巧:使用sed命令进行正则表达式替换和编辑sed(stream editor)是Linux命令中功能强大的文本处理工具之一,它可以通过正则表达式实现对文本的替换和编辑操作。

在本文中,我们将介绍使用sed命令进行正则表达式替换和编辑的高级技巧。

一、sed命令概述sed命令是Unix和类Unix系统中一种重要的文本处理工具,其主要用途是根据指定的规则对文本进行替换、删除、插入、选择等操作。

sed命令可以从标准输入或文件中读取数据,并将处理结果输出到标准输出或文件中。

二、使用sed进行替换操作1. 基本替换操作sed命令的基本格式是:```sed 's/old/new/' file```其中,s表示替换操作,old表示待替换的字符串,new表示替换后的字符串,file表示待处理的文件名。

2. 全局替换操作如果要对整个文本中的所有匹配项进行替换,可以使用g标志(global):```sed 's/old/new/g' file```这样可以确保将所有匹配项都替换掉。

3. 使用&符号引用匹配项在替换字符串时,可以使用&符号引用匹配到的字符串。

例如,要将文本中的所有数字替换为"number",可以使用以下命令:```sed 's/[0-9]*/number/g' file```其中,[0-9]*表示匹配一个或多个数字。

4. 引用特殊字符如果要替换的字符串中包含特殊字符,如换行符或制表符,可以使用反斜杠进行转义。

例如,要将文本中的制表符替换为一个空格,可以使用以下命令:```sed 's/\t/ /g' file```三、使用sed进行编辑操作除了替换操作,sed命令还可以进行其他编辑操作,如删除行、插入行和打印行等。

1. 删除匹配行要删除文本中匹配特定模式的行,可以使用d命令。

Linux命令进阶使用sed进行正则表达式匹配与替换

Linux命令进阶使用sed进行正则表达式匹配与替换

Linux命令进阶使用sed进行正则表达式匹配与替换sed(Stream Editor)是Unix/Linux系统中一种常用的命令行文本编辑工具,它可以在对数据进行流式处理时,根据用户指定的规则进行字符串匹配与替换。

sed支持正则表达式,使得在处理文本时,更加灵活高效。

本文将介绍如何使用sed进行正则表达式匹配与替换,以及一些常见的用法和实例。

一、sed命令概述sed命令是Linux系统中的一个强大的文本处理工具,常用于从文件或者标准输入流中读取数据,并按照指定的规则进行处理。

它的基本语法为:```sed [options] 'command' file(s)```其中,options是可选的参数,command是sed的操作命令,file(s)表示要处理的文件。

sed命令可以直接在命令行中使用,也可以将命令写入一个脚本文件中进行批量处理。

二、sed命令选项sed命令有许多选项,下面介绍一些常用的选项:1. -n:只打印经过sed命令处理后的结果,不输出其他内容。

2. -i:直接修改原文件,而不是打印结果到标准输出。

3. -e:指定多个命令,用分号分隔。

4. -r:启用扩展正则表达式。

5. -f file:从指定的文件中读取sed命令。

三、sed基本操作命令1. p:打印匹配行。

2. d:删除匹配行。

3. s/pattern/replacement/g:替换匹配的文本。

4. i:在指定行之前插入文本。

5. a:在指定行之后追加文本。

四、使用sed进行正则表达式匹配与替换sed命令的最常见用法是进行字符串匹配与替换。

下面介绍一些常用的正则表达式匹配与替换操作:1. 使用sed进行简单的字符串替换假设我们有一个文件file.txt,内容如下:```Hello, World!```我们可以通过下面的命令使用sed进行简单的字符串替换:```sed 's/Hello/Hi/' file.txt```执行上述命令后,输出的结果如下:```Hi, World!```这条命令中,s表示替换操作,/Hello/表示要被替换的字符串,/Hi/表示替换后的字符串。

sed 对满足条件的行 替换字符串

sed 对满足条件的行 替换字符串

文章标题:深度解析 sed 命令:如何对满足条件的行进行字符串替换在计算机编程和系统管理中,文本处理是一个非常重要的任务。

特别是对于文本文件中满足特定条件的行进行替换操作,是常见的需求。

而在Linux和Unix系统中,sed命令是非常强大且常用的文本处理工具之一。

本文将深入探讨sed命令在对满足条件的行进行字符串替换方面的应用,帮助读者更全面地理解sed命令的使用方法和原理。

1. 什么是 sed 命令?在开始讨论如何对满足条件的行进行字符串替换之前,让我们先简单了解一下什么是sed命令。

sed是流编辑器(stream editor)的缩写,是一个用于对文本进行编辑的非交互式的命令行工具,它按行处理输入流,并根据给定的编辑指令来操作文本。

sed的基本工作流程是逐行读取输入,对每一行应用一系列编辑命令,然后将结果输出。

它广泛应用于文本处理、批量编辑和脚本编程等领域。

2. sed 替换命令在sed中,替换(substitution)是最常用的操作之一。

通过替换命令,可以将指定模式的文本替换为新的文本。

其基本语法如下:```bashsed 's/原始文本/替换文本/g'```- 's'代表替换命令,表示对满足条件的行进行替换操作。

- 原始文本是要被替换的文本模式,可以是正则表达式。

- 替换文本是用于替换原始文本的新文本。

- 'g'代表全局替换,表示对每一行中的所有匹配进行替换。

如果不加'g',则只会替换每一行的第一个匹配。

以下是一个简单的例子,演示了如何使用sed替换命令:```bash$ echo "hello world" | sed 's/hello/hi/'hi world```在这个例子中,我们将原始文本中的"hello"替换为"hi",并输出替换后的结果。

使用sed命令进行行删除和替换

使用sed命令进行行删除和替换

使用sed命令进行行删除和替换简介:sed(stream editor)是Linux系统中用于流编辑的一种强大工具,它能够实现对文本文件的修改、匹配、删除和替换等操作。

本文将介绍sed命令的使用方法,着重讨论行删除和替换功能。

一、行删除1. 删除单行要删除文件中的某一行,可以使用sed命令的“d”选项。

例如,删除文件中第5行的内容,可以使用以下命令:```shellsed '5d' filename```这样就会删除文件filename中的第5行。

2. 删除多行要删除文件中的多行,可以使用以下命令:```shellsed '2,5d' filename```这样会删除文件filename中的第2行到第5行的内容。

二、行替换1. 替换单词要替换文件中的某个单词,可以使用sed命令的“s”选项。

例如,将文件中的"old_word"替换为"new_word",可以使用以下命令:```shellsed 's/old_word/new_word/g' filename```这样会将文件filename中所有的"old_word"替换为"new_word"。

2. 替换行中的内容除了替换单个单词,sed命令还可以替换一整行的内容。

例如,将文件中包含"old_word"的行替换为"new_content",可以使用以下命令:```shellsed '/old_word/c new_content' filename```这样会将文件filename中所有含有"old_word"的行替换为"new_content"。

三、应用示例以下是一些使用sed命令进行行删除和替换的示例:1. 示例一:```This is line 1This is line 2This is line 3This is line 4This is line 5```要删除第3行和第4行,可以使用以下命令:```shellsed '3,4d' filename```执行结果为:```This is line 1This is line 2This is line 5```2. 示例二:```Hello, world!This is a test.Hello, sed!Goodbye, sed!```要将文件中所有的"sed"替换为"awk",可以使用以下命令:```shellsed 's/sed/awk/g' filename```执行结果为:```Hello, world!This is a test.Hello, awk!Goodbye, awk!```总结:本文介绍了sed命令的行删除和替换功能。

sed常见用法

sed常见用法

sed常见用法
sed是一个强大的文本处理工具,它可用于在命令行中编辑文本文件的内容。

sed通常用于过滤和转换文本数据,它可以执行的操作包括查找和替换、删除行、插入行、追加行、转换大小写等。

以下是sed的一些常见用法:
1. 查找和替换:使用sed命令可以查找并替换文本中的某个字符串,语法为:sed 's/old/new/g' filename,其中old表示要被替换的字符串,new表示替换后的字符串,g表示全局替换。

2. 删除行:使用sed命令可以删除文本中的某些行,语法为:sed 'Nd' filename,其中N表示要删除的行数。

3. 插入行:使用sed命令可以在文本中插入新的行,语法为:sed 'Niafter_text' filename,其中N表示在第N行后插入文本,i表示插入,after_text表示要插入的文本内容。

4. 追加行:使用sed命令可以在文本的末尾追加新的行,语法为:sed '$aafter_text' filename,$表示文本的末尾,a表示追加,after_text表示要追加的文本内容。

5. 转换大小写:使用sed命令可以将文本中的字母转换成大写或小写,语法为:sed 's/[a-z]/U&/g' filename(将小写字母转换成大写字母),sed 's/[A-Z]/L&/g' filename(将大写字母转换成小写字母)。

以上是sed的一些常见用法,它们可以帮助我们更轻松地处理文本文件。

Linux命令高级技巧使用sed进行字符串替换

Linux命令高级技巧使用sed进行字符串替换

Linux命令高级技巧使用sed进行字符串替换在Linux系统中,命令行是一种非常强大和灵活的工具。

它可以帮助我们完成各种任务,其中之一就是进行字符串替换。

sed命令是其中一个重要的工具,它可以在文本中进行搜索和替换操作。

在本文中,我们将学习如何使用sed命令进行字符串替换,并展示一些高级技巧来提高效率。

一、基本的字符串替换首先,让我们来看一个简单的例子,演示如何使用sed命令进行基本的字符串替换。

假设我们有一个文本文件,其中包含着一些名字,我们想将其中的某个名字替换为另一个名字。

我们可以使用以下的命令:```bashsed 's/old_name/new_name/g' file.txt```其中,old_name表示要被替换的字符串,new_name表示用来替换的字符串,g表示全局替换。

这条命令将会在文件file.txt中将所有的old_name替换为new_name。

例如,我们有一个名为names.txt的文件,内容如下:```textJohnAliceBob```如果我们想把名字Alice替换为Eva,可以使用以下命令:```bashsed 's/Alice/Eva/g' names.txt```执行此命令后,文件names.txt的内容将变为:```textJohnEvaBob```二、使用正则表达式进行替换sed命令还支持使用正则表达式进行替换操作,这使得替换更加灵活和强大。

下面是一个使用正则表达式进行替换的例子。

假设我们有一个文件phone_numbers.txt,其中包含一些电话号码。

这些电话号码的格式可能是不同的,我们想将它们统一成一种格式。

我们可以使用如下的命令:```bashsed 's/\([0-9]\{3\}\)-\([0-9]\{4\}\)-\([0-9]\{4\}\)/\1\2\3/g'phone_numbers.txt```在这个命令中,我们使用了正则表达式来匹配电话号码的格式。

Linux中使用sed命令实现文本替换和编辑

Linux中使用sed命令实现文本替换和编辑Linux是一种开放源代码的操作系统,广泛应用于服务器和嵌入式设备中。

在Linux系统中,sed命令是一个非常强大的文本处理工具,它可以用于实现文本替换和编辑功能。

本文将介绍如何在Linux系统中使用sed命令进行文本替换和编辑。

一、sed命令简介sed是一款流式文本编辑器,可以用来对文本进行替换、删除、插入、删除行以及基于正则表达式的其他操作。

它的命令格式通常是这样的:sed [选项] '[动作]' 文件选项可以是不同的标记,用于控制sed的行为。

动作是一系列的sed编辑命令,可以进行多次编辑操作。

文件是待处理的文本文件。

二、文本替换在sed命令中,最常用的功能之一就是文本替换。

sed提供了s命令来实现替换操作。

使用s命令的一般格式如下:sed 's/替换前/替换后/' 文件其中,替换前是待替换的文本,替换后是替换后的内容,文件是待处理的文本文件。

sed会从文件中搜索替换前的文本,并将其替换为替换后的内容。

例如,我们要将文件中的所有"apple"替换为"orange",可以使用以下命令:sed 's/apple/orange/' 文件三、替换指定行有时我们需要仅替换文件中的某些行,而不是全部替换。

sed提供了行号限定的功能,可以通过行号来指定要进行替换的行。

使用行号限定的替换格式如下:sed '行号 s/替换前/替换后/' 文件其中,行号是待替换行的行号,替换前和替换后的含义与前面相同。

例如,我们要替换文件中第5行的"apple"为"orange",可以使用以下命令:sed '5 s/apple/orange/' 文件四、替换所有匹配默认情况下,sed只会替换每行中第一个匹配的文本。

如果我们希望替换行中的所有匹配,可以使用g标记。

sed命令的替换规则

sed命令的替换规则简介:sed(stream editor)是一种流式文本编辑器,它可以用来对文本进行替换、删除、插入等操作。

sed命令的替换规则是其最常用的功能之一,本文将介绍sed命令的替换规则及其使用方法。

一、替换规则的基本语法sed命令的替换规则基本语法如下:sed 's/原字符串/目标字符串/g'其中,s表示替换操作,/原字符串/表示要替换的原始字符串,/目标字符串/表示替换后的目标字符串,g表示全局替换。

二、替换规则的常见用法1. 单词替换sed 's/原单词/目标单词/g'该命令将文本中所有的原单词替换为目标单词。

2. 删除行sed '/要删除的行/d'该命令将删除文本中包含要删除的行的所有行。

3. 插入行sed '/要插入的行/i 插入的内容'该命令将在文本中包含要插入的行之前插入指定的内容。

4. 替换行sed '行号c 替换的内容'该命令将指定行号的行替换为指定的内容。

5. 替换指定范围的内容sed '起始行号,结束行号s/原字符串/目标字符串/g'该命令将在指定的范围内将原字符串替换为目标字符串。

三、替换规则的高级用法1. 使用正则表达式sed 's/正则表达式/目标字符串/g'该命令可以使用正则表达式来匹配原字符串,并将匹配到的内容替换为目标字符串。

2. 使用&符号sed 's/原字符串/&目标字符串/g'该命令将原字符串替换为原字符串加上目标字符串。

3. 使用\1、\2等反向引用sed 's/\(正则表达式\)/\1目标字符串/g'该命令将使用正则表达式匹配到的内容作为反向引用,并将其替换为反向引用加上目标字符串。

四、实例演示为了更好地理解sed命令的替换规则,下面给出几个实例演示。

1. 替换文本中的单词假设我们有一个文本文件test.txt,内容如下:This is a test.我们可以使用sed命令将其中的test替换为example:sed 's/test/example/g' test.txt执行以上命令后,test.txt的内容将变为:This is a example.2. 删除指定行假设我们有一个文本文件test.txt,内容如下:Line 1Line 2Line 3我们可以使用sed命令删除其中的第2行:sed '2d' test.txt执行以上命令后,test.txt的内容将变为:Line 1Line 33. 在指定行之前插入内容假设我们有一个文本文件test.txt,内容如下:Line 1Line 2Line 3我们可以使用sed命令在第2行之前插入一行新的内容:sed '2i New Line' test.txt执行以上命令后,test.txt的内容将变为:Line 1New LineLine 2Line 34. 替换指定范围内的内容假设我们有一个文本文件test.txt,内容如下:Line 1Line 2Line 3我们可以使用sed命令将第2行到第3行之间的所有Line替换为New Line:sed '2,3s/Line/New Line/g' test.txt执行以上命令后,test.txt的内容将变为:Line 1New Line 2New Line 3五、总结本文介绍了sed命令的替换规则及其使用方法。

shell sed用法

shell sed用法Sed是一款非常强大的流编辑器,可以在命令行下对文本进行快速、高效的编辑和转换。

它可以用于查找、替换、删除和插入文本,在文本处理和数据处理中广泛使用。

1. 替换文本内容:Sed的最常见用法之一是替换文本内容。

使用如下格式的命令可以将文本中的某个字符串A替换为字符串B:sed 's/A/B/g' filename这个命令会在指定的文件中查找字符串A,并将其替换为B。

其中's'表示替换操作的开始,'g'表示全局替换的意思。

2. 删除指定行:如果需要删除某个文件中的某一行或者多行,可以使用如下命令:sed '3d' filename这个命令将删除指定文件中的第3行。

如果需要删除多行,可以使用逗号分隔行号。

例如,sed '2,4d' filename将删除第2行到第4行之间的内容。

3. 插入或添加文本:使用sed,可以很方便地在文件中添加新的文本。

例如,要在文件的开头插入一行文本,可以使用如下命令:sed '1i\新行' filename这个命令会在指定文件的第一行之前插入一行文本"新行"。

4. 文件内容的提取:假设需要从某个文件中提取出符合特定条件的内容,可以使用sed进行处理。

例如,要提取文件中包含某个特定字符串的行,可以使用如下命令:sed -n '/关键词/p' filename这个命令会在文件中搜索关键词,并将包含关键词的行打印出来。

总结:Sed是一款强大的流编辑器,在文本处理中具有广泛的应用。

它可以进行文本替换、行删除、行插入以及内容提取等功能。

掌握sed的基本用法,可以提高文本处理的效率和灵活性。

sed案例

sed案例sed是一种流编辑器,用于对文本进行查找、替换、插入和删除等操作。

下面是一些关于sed的案例,旨在帮助读者更好地理解和运用sed命令。

1. 替换文本内容sed命令最常见的用途之一是替换文本内容。

例如,将文本文件中的所有"apple"替换为"orange",可以使用以下命令:```sed 's/apple/orange/g' file.txt```2. 删除空白行如果文本文件中存在大量的空白行,可以使用sed命令删除这些空白行。

以下命令用于删除空白行:```sed '/^$/d' file.txt```3. 插入文本sed命令还可以用于在文本文件中插入新的文本行。

例如,以下命令将在每行之前插入一个新的文本行:```sed 'i\New Line' file.txt```4. 删除指定行如果需要删除文本文件中的特定行,可以使用sed命令。

例如,以下命令将删除第5行:```sed '5d' file.txt```5. 使用正则表达式sed命令可以与正则表达式一起使用,以便更精确地匹配和处理文本。

例如,以下命令将删除所有以字母开头的行:```sed '/^[a-zA-Z]/d' file.txt```6. 替换文件内容使用sed命令时,可以直接修改文件内容,而无需将结果输出到标准输出。

例如,以下命令将在文件中将所有的"apple"替换为"orange":```sed -i 's/apple/orange/g' file.txt```7. 仅显示匹配行如果只希望显示匹配特定模式的行,可以使用sed命令的-n选项。

以下命令将只显示包含"apple"的行:```sed -n '/apple/p' file.txt```8. 反向引用通过使用正则表达式和反向引用,sed命令可以非常灵活地处理文本。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

sed替换让我们看一下 sed 最有用的命令之一,替换命令。

使用该命令,可以将特定字符串或匹配的规则表达式用另一个字符串替换。

下面是该命令最基本用法的示例:Linux代码1.$ sed -e 's/foo/bar/' myfile.txt上面的命令将 myfile.txt 中每行第一次出现的 'foo'(如果有的话)用字符串'bar' 替换,然后将该文件内容输出到标准输出。

请注意,我说的是每行第一次出现,尽管这通常不是您想要的。

在进行字符串替换时,通常想执行全局替换。

也就是说,要替换每行中的所有出现,如下所示:Linux代码1.$ sed -e 's/foo/bar/g' myfile.txt在最后一个斜杠之后附加的 'g' 选项告诉 sed 执行全局替换。

关于 's///' 替换命令,还有其它几件要了解的事。

首先,它是一个命令,并且只是一个命令,在所有上例中都没有指定地址。

这意味着,'s///' 还可以与地址一起使用来控制要将命令应用到哪些行,如下所示:Linux代码1.$ sed -e '1,10s/enchantment/entrapment/g' myfile2.txt上例将导致用短语 'entrapment' 替换所有出现的短语 'enchantment',但是只在第一到第十行(包括这两行)上这样做。

Linux代码1.$ sed -e '/^$/,/^END/s/hills/mountains/g' myfile3.txt该例将用 'mountains' 替换 'hills',但是,只从空行开始,到以三个字符'END' 开始的行结束(包括这两行)的文本块上这样做。

关于 's///' 命令的另一个妙处是 '/' 分隔符有许多替换选项。

如果正在执行字符串替换,并且规则表达式或替换字符串中有许多斜杠,则可以通过在 's' 之后指定一个不同的字符来更改分隔符。

例如,下例将把所有出现的 /usr/local 替换成 /usr:Linux代码1.$ sed -e 's:/usr/local:/usr:g' mylist.txt在该例中,使用冒号作为分隔符。

如果不指定分隔符,则变成了如下:Linux代码1.$ sed -e 's/usr/local/usrg' mylist.txt这样就不能执行了如果需要在规则表达式中指定分隔符字符,可以在它前面加入反斜杠。

规则表达式混乱目前为止,我们只执行了简单的字符串替换。

虽然这很方便,但是我们还可以匹配规则表达式。

例如,以下 sed 命令将匹配从 '<' 开始、到 '>' 结束、并且在其中包含任意数量字符的短语。

下例将删除该短语(用空字符串替换):Linux代码1.$ sed -e 's/<.*>//g' myfile.html这是要从文件除去 HTML 标记的第一个很好的 sed 脚本尝试,但是由于规则表达式的特有规则,它不会很好地工作。

原因何在?当 sed 试图在行中匹配规则表达式时,它要在行中查找最长的匹配。

在我的前一篇 sed 文章中,这不成问题,因为我们使用的是 'd' 和 'p' 命令,这些命令总要删除或打印整行。

但是,在使用 's///' 命令时,确实有很大不同,因为规则表达式匹配的整个部分将被目标字符串替换,或者,在本例中,被删除。

这意味着,上例将把下行:<b>This</b> is what <b>I</b> meant.变成:meant.我们要的不是这个,而是:This is what I meant.幸运的是,有一种简便方法来纠正该问题。

我们不输入“'<' 字符后面跟有一些字符并以 '>' 字符结束”的规则表达式,而只需输入一个“'<' 字符,后面跟有任意数量非 '>' 字符,并以 '>' 字符结束”的规则表达式。

这将与最短、而不是最长的可能性匹配。

新命令如下:Linux代码1.$ sed -e 's/<[^>]*>//g' myfile.html在上例中,'[^>]' 指定“非'>'”字符,其后的 '*' 完成该表达式以表示“零或多个非 '>' 字符”。

对几个 html 文件测试该命令,将它们管道输出 "more",然后仔细查看其结果。

更多字符匹配'[ ]' 规则表达式语法还有一些附加选项。

要指定字符范围,只要字符不在第一个或最后一个位置,就可以使用 '-',如下所示:QUOTE:'[a-x]*'这将匹配零或多个全部为 'a'、'b'、'c'...'v'、'w'、'x' 的字符。

另外,可以使用 '[]' 字符类来匹配空格。

以下是可用字符类的相当完整的列表:字符类描述[] 字母数字 [a-z A-Z 0-9][] 字母 [a-z A-Z][] 空格或制表键[] 任何控制字符[] 数字 [0-9][] 任何可视字符(无空格)[] 小写 [a-z][] 非控制字符[] 标点字符[] 空格[] 大写 [A-Z][] 十六进制数字 [0-9 a-f A-F]尽可能使用字符类是很有利的,因为它们可以更好地适应非英语 locale(包括某些必需的重音字符等等).高级替换功能我们已经看到如何执行简单甚至有些复杂的直接替换,但是 sed 还可以做更多的事。

实际上可以引用匹配规则表达式的部分或全部,并使用这些部分来构造替换字符串。

作为示例,假设您正在回复一条消息。

下例将在每一行前面加上短语"ralph said: ":Linux代码1.$ sed -e 's/.*/ralph said: &/' origmsg.txt输出如下:ralph said: Hiya Jim, ralph said: ralph said:I sure like this sed stuff! ralph said:该例的替换字符串中使用了 '&' 字符,该字符告诉 sed 插入整个匹配的规则表达式。

因此,可以将与 '.*' 匹配的任何内容(行中的零或多个字符的最大组或整行)插入到替换字符串中的任何位置,甚至多次插入。

这非常好,但 sed 甚至更强大。

那些极好的带反斜杠的圆括号's///' 命令甚至比 '&' 更好,它允许我们在规则表达式中定义区域,然后可以在替换字符串中引用这些特定区域。

作为示例,假设有一个包含以下文本的文件:foo bar oni eeny meeny miny larry curly moe jimmy the weasel现在假设要编写一个 sed 脚本,该脚本将把 "eeny meeny miny" 替换成"Victor eeny-meeny Von miny" 等等。

要这样做,首先要编写一个由空格分隔并与三个字符串匹配的规则表达式。

'.* .* .*'现在,将在其中每个感兴趣的区域两边插入带反斜杠的圆括号来定义区域:'\(.*\) \(.*\) \(.*\)'除了要定义三个可在替换字符串中引用的逻辑区域以外,该规则表达式的工作原理将与第一个规则表达式相同。

下面是最终脚本:Linux代码1.$ sed -e 's/\(.*\) \(.*\) \(.*\)/Victor \1-\2 Von \3/' myfile.txt如您所见,通过输入 '\x'(其中,x 是从 1 开始的区域号)来引用每个由圆括号定界的区域。

输入如下:Victor foo-bar Von oni Victor eeny-meeny Von miny Victor larry-curly Von moe Victor jimmy-the Von weasel随着对 sed 越来越熟悉,您可以花最小力气来进行相当强大的文本处理。

您可能想如何使用熟悉的脚本语言来处理这种问题 -- 能用一行代码轻易实现这样的解决方案吗?组合使用在开始创建更复杂的 sed 脚本时,需要有输入多个命令的能力。

有几种方法这样做。

首先,可以在命令之间使用分号。

例如,以下命令系列使用 '=' 命令和 'p' 命令,'=' 命令告诉 sed 打印行号,'p' 命令明确告诉 sed 打印该行(因为处于 '-n' 模式)。

Linux代码1.$ sed -n -e '=;p' myfile.txt无论什么时候指定了两个或更多命令,都按顺序将每个命令应用到文件的每一行。

在上例中,首先将 '=' 命令应用到第 1 行,然后应用 'p' 命令。

接着,sed 继续处理第 2 行,并重复该过程。

虽然分号很方便,但是在某些场合下,它不能正常工作。

另一种替换方法是使用两个 -e 选项来指定两个不同的命令:Linux代码1.$ sed -n -e '=' -e 'p' myfile.txt然而,在使用更为复杂的附加和插入命令时,甚至多个 '-e' 选项也不能帮我们的忙。

对于复杂的多行脚本,最好的方法是将命令放入一个单独的文件中。

然后,用 -f 选项引用该脚本文件:Linux代码1.$ sed -n -f mycommands.sed myfile.txt这种方法虽然可能不太方便,但总是管用。

一个地址的多个命令有时,可能要指定应用到一个地址的多个命令。

这在执行许多 's///' 以变换源文件中的字和语法时特别方便。

相关文档
最新文档