第14章 sed和awk
14.1.2 sed的模式空间
• sed维护一种模式空间,即一个工作区或临时缓冲区,当使用编辑命 令时,将在那里储存单个输入行。下图展示了进行模式空间转换的一 个两行的sed脚本。它将“The linux system”转换为“The LINUX Operating System”。
14.1.2 sed的模式空间
第14章 sed和awk
sed和awk是我们处理文本文件的有力工具。它们的功 能将带给我们事半功倍的效果。比如,对于某些重复性 的编辑工作,我们就可以选择sed,因为它可以省去我 们的一些单调乏味的工作,我们可以总结一个解决方案 来取代重复一系列按键,一旦这样完成了任务,你会为 自己的聪明而自豪,因为你省去了一些枯燥的劳动。 我们之所以会将sed和awk放在一章中学习,是因为它 们具有很多共同点: • 它们都使用相似的语法来调用。 • 它们都是面向字符流的,都是从文本文件中每次一行 地读取输入,并将输出直接送到标准输出端。 • 它们都使用正则表达式进行模式匹配 • 它们都允许用户将指令放在文件中一起执行。 接下来,我们就来开始这两个神奇工具的学习!
• 初始时,模式空间包含单个输入行的备份。在图14.1中是 “The linux system”行。sed脚本中正常的流程是在这一 行上执行每个命令,直到执行到sed脚本的末尾。脚本中 的第一个命令应用于这一行,将linux转换成LINUX。然 后执行第二个命令,将LINUX system转换成LINUX Operating System。注意第二个替换命令的模式不匹配最 初的输入行,它匹配模式空间中发生了变化的当前行。 • 当应用了所有的指令后,当前行被输出并且输入的下一行 被读入模式空间。然后sed脚本中的所有命令应用于新读 入的行。 • 结果是,任何一个sed指令都可以为下一个命令修改模式 空间的内容。模式空间的内容是动态的,而且并不总是匹 配最初的输入行。
14.2.4 打印编辑命令
• 打印(p)编辑命令输出模式空间的内容,它既不 清除模式空间也不改变脚本中的控制流。然而, 它一般会被频繁地用在改变流控制的命令(比如: d、N、b)之前。除非抑制(使用-n选项)默认 的输出,否则打印命令将输出行的重复复制。当 抑制默认的输出,或者当通过程序的流控制来避 免到达脚本的底部时,也可能会使用它。 • 下面我们看一个如何使用打印命令来进行调试的 sed脚本sedDebug。它用于显示在发生任意改变 之前行是什么样的。
14.2 基本的sed编辑命令
• sed指令的地址对于任何sed的编辑命令都是可选的。它可以是一个模 式,被描述为由斜杠、行号或行寻址符号括住的正则表达式。大多数 sed命令能接受由逗号分隔的两个地址,这两个地址用来标识行的范 围。这些指令的语法格式为: • [address1, address2]command • 有一些编辑命令只接受单个地址。它们不能应用于某个范围的行。它 们的语法格式为: • [line-address]command • 编辑命令还可以用大括号进行分组以使其作用于同一个地址,其语法 格式为: • address { • command1 • command2 • command3 • }
• 读取下一行(n)编辑命令用于读取输入的下一行到 模式空间。其语法如下所示: • [address]n • 读取下一行命令(n)改变了正常的流控制,它导致 输入的下一行取代模式空间中的当前行。脚本中的后 续命令应用于替换后的行,而不是当前行。如果没有 抑制默认输出,那么在替换发生之前会打印当前行。 • 下面我们来看一个读取下一行命令的实例,在这个例 子中,当空行在一个匹配模式的行之后时,则删除该 空行。如在文件mail.txt中“From :”行之后插入一 个空行。我们想要删除这个空行而不是删除文件中的 所有空行。
14.2.3 替换编辑命令
• 数字标志仅在很少的情况下使用。比如,正则表示式 在一行上重复匹配,而我们又只需对其中某个位置的 匹配进行替换。 • 替换命令(s)应用于与地址(address)匹配的行。 如果没有指定地址,那么就应用于模式(pattern)匹 配的所有行。如果正则表达式作为地址来提供,并且 没有指定模式,那么替换命令匹配由地址匹配的内容。 当替换命令是应用于同一个地址上的多个命令之一时, 这可能会非常有用。 • 地址需要一个作为定界符的斜杠‘/’,和地址不同 的是,正则表达式可以用任意字符来分隔,只有换行 符除外。因此,如果模式包含斜杠,那么可以选择另 一个字符作为定界符.
14.2 基本的sed编辑命令
• sed指令的语法形式如下所示: • [address[,address]][!]command • sed会将每个输入行拷贝到一个模式空间。sed指 令由地址和编辑命令组成。如果指令的地址和模 式空间中的行匹配,那么编辑命令就被应用于匹 配的行。如果一个sed指令没有地址,那么它被应 用于每个输入行。如果一个编辑命令改变了模式 空间的内容,后续的编辑命令的地址将被应用于 模式空间中的当前行,而不是原始的输入行。
14.2 基本的sed编辑命令
• 像大多数Linux程序一样,sed可以从标准输入获取输 入并发送输出到标准输出。如果指定一个文件名作为 参数,则可从那个文件中获取输入,而输出中将包含 处理后的信息。sed同样可以通过Shell中的重定向将 输出重定向到一个文件中,但这个文件必须不能与用 于输入的是同一个文件。 • 调用sed命令的语法有两种:在命令行指定你的sed指 令,或是将sed指令放入一个文件中并将其文件名作 为参数。所以sed命令的两种语法分别如下所示: • sed [OPTIONS]… 'COMMAND' [FILE]… • sed [OPTIONS] -f SCRIPTFILE [FILE]…
14.1.1 sed简介
• sed可以用于实现整个文档的一致性。你可以查找一 个特定条目的所有不同的使用方式并把它们变成完全 一致。例如,用ASCII字符码替换前后双引号(“弯 引号”而不是"直引号")时,就可以使用sed。 • sed具有几个基本的可以用于构建更复杂脚本的编程 结构。它同样也有同时只能编辑一行的限制。 • 总的来说,我们可以使用sed做如下操作: • 自动化地编辑一个或多个文件。 • 简化在多个文件中执行相同编辑的任务。 • 编写转换程序。
14.2.5 打印行号编辑命令
• 跟在地址后面的等号‘=’用来打印被匹配的行 的行号。除非抑制行的自动输出,行号和行本身 将被打印。它的语法如下所示: • [line-address]= • 注意:这个命令不能对一个范围内的行进行操作。 • 程序员可能会使用该命令来打印源文件中的某些 行。
14.2.6 读取下一行编辑命令
14.1.1 sed简介
• 使用sed类似于编写简单的Shell脚本。你可以依次指定将 要执行的一系列行为。这些行为中的大部分可以在vi中手 动地完成,比如:替换文本、删除某行、插入新文本等等。 而sed的优势在于你可以在一处(一个sed脚本中)指定所 有的编辑命令,然后逐条执行它们。你不必进入到每个文 件中做每个修改。sed同样可以有效地编辑非常大的,在 使用交互式文本编辑器编辑时会很慢的文件。 • 在创建和维护文档的过程中有很多机会使用sed,尤其是 当文档由单独的章节组成,每一章放在分隔的文件中时。 特别是,比如一个文件稿本在评审之后,有很多变更可能 要应用到所有文件中。例如,在软件文档化项目中,软件 的名称或它的组件可能会变更,你需要追查和进行修改, 使用sed,就可以很简单地进行处理。
14.2 基本的sed编辑命令
• sed有如下常用的选项: • -e - 它告诉sed将下一个参数解释为sed指令。只有在 命令行上给出多个sed指令时才需要使用-e选项。 • -f - 指定由sed指令组成的脚本的名称。如果sed脚本 的第一行为“#n”,则sed的行为与指定-n选项相同。 • -i - 直接修改读取的内容,而不是输出到终端。 • -n - 取消默认输出。在一般sed的用法中,所有来自 标准输入的数据一般都会被显示到终端上。但如果使 用-n参数后,只有经过sed处理的行才会被显示输出。
14.2.2 删除编辑命令
• 删除(d)编辑命令采用一个地址,如果行匹配这 个地址就删除模式空间的内容。删除命令(d)还 是一个可以改变脚本中的控制流的命令。这是因 为一旦执行这个命令,那么在“空的”模式空间 中就不会再有命令执行。删除命令(d)会导致读 取新输入行,而编辑脚本则从头开始新的一轮。 重要的是,如果某行匹配这个地址,那么就删除 整个行,而不只是删除行中匹配的部分。
• 追加(a)、更改(c)、插入(i)编辑命令提供了类似于vi交互式编辑器的 编辑功能。这些命令的语法在sed中并不常用,因为它们必须在多行上来指定。 语法如下所示: • [line-address]a\ • text • • [line-address]i\ • text • • [line-address]c\ • text • 追加命令(a)将文本放置在当前行之后。更改命令(c)用所指定的文本取 代模式空间的内容。插入命令(i)将所提供的文本放置在模式空间的当前行 之前。这些命令中的每一个都要求后面跟一个反斜杠用于转义第一个行尾, text必须从下一行开始。如要输入多行文本,每个连续的行都必须用反斜杠 结束,最后一行除外。而且,如果文本包含一个字面含义的反斜杠,要再添 加一个反斜杠来转义它。
14.2 基本的sed编辑命令
• sed的编辑命令有24个,关于每个编辑命令的用 途的详细信息请参考sed的man参考手册。这一节 我们仅介绍其中的几个编辑命令:追加(a)、更 改(c)、删除(d)、插入(i)、替换(s)、 打印(l)、打印行号(=)、转换(y)
1Байду номын сангаас.2.1 追加、更改、插入编辑命令
14.2.3 替换编辑命令
• 替换(s)编辑命令的语法如下所示: • [address]s/pattern/replacement/flags • 这里flags是替换命令(s)的修饰标志,有如下几 个: • n – 1到512之间的数字,表示对文本模式pattern 中指定模式第n次出现的情况进行替换。 • g – 对模式空间的所有出现的情况进行全局更改。 而没有g是通常只有第一次出现的情况被更改。 • p – 打印模式空间的内容。 • w file – 将模式空间的内容写入到文件file中。
高级Shell脚本编写技巧使用awk和sed进行文本处理和数据转换
高级Shell脚本编写技巧使用awk和sed进行文本处理和数据转换高级Shell脚本编写技巧:使用awk和sed进行文本处理和数据转换在Shell脚本编写中,awk和sed是两个常用的命令工具,它们可以高效地进行文本处理和数据转换。
本文将介绍一些使用awk和sed的高级技巧,帮助读者更好地利用这两个工具来处理文本和转换数据。
一、awk技巧1.基本语法awk是一种强大的文本处理工具,其基本语法为:awk 'pattern { action }' file其中,pattern是模式,决定是否对文本进行处理,action则是具体的处理动作。
file是需要处理的文件。
例如,要打印文件的第一列,可以使用以下命令:awk '{ print $1 }' file2.模式和动作在awk中,可以根据需求灵活组合模式和动作。
例如,要输出第一列大于100的行,可以使用以下命令:awk '$1 > 100 { print }' file3.内置变量awk提供了许多内置变量,用于方便地处理文本。
例如,$0表示整行文本,$1、$2等表示第n列,NF表示列数,NR 表示行号等。
可以利用这些内置变量来编写更加灵活的命令。
4.awk函数awk还提供了一些内置函数,用于处理文本。
例如,substr函数用于截取子字符串,length函数用于返回字符串长度等。
可以根据需要选择合适的函数来处理文本数据。
二、sed技巧1.基本语法sed是一种流编辑器,其基本语法为:sed 'pattern { action }' file其中,pattern是模式,决定是否对文本进行处理,action则是具体的处理动作。
file是需要处理的文件。
例如,将文件中所有的"apple"替换为"orange",可以使用以下命令:sed 's/apple/orange/g' file2.替换操作sed最常用的功能之一就是替换文本。
Linux三剑客awk、grep、sed详解
Linux三剑客awk、grep、sed详解⼀、前⾔linux 有很多⼯具可以做⽂本处理,例如:sort, cut, split, join, paste, comm, uniq, column, rev, tac, tr, nl, pr, head, tail.....,学习 linux ⽂本处理的懒惰⽅式(不是最好的⽅法)可能是:只学习grep,sed和awk。
使⽤这三个⼯具,你可以解决近 99% linux 系统的⽂本处理问题,⽽不需要记住上⾯不同的命令和参数。
:)⽽且,如果你已经学会并使⽤了三者,你就会知道其中的差异。
实际上,这⾥的差异意味着哪个⼯具擅长解决什么样的问题。
⼀种更懒惰的⽅式可能是学习脚本语⾔(python,perl或ruby)并使⽤它进⾏每个⽂本处理。
⼆、概述awk、grep、sed 是 linux 操作⽂本的三⼤利器,也是必须掌握的 linux 命令之⼀。
三者的功能都是处理⽂本,但侧重点各不相同,其中属awk 功能最强⼤,但也最复杂。
grep 更适合单纯地查找或匹配⽂本,sed 更适合编辑匹配到的⽂本,awk 更适合格式化⽂本,对⽂本进⾏较复杂格式处理。
简单概括:grep:数据查找定位awk:数据切⽚sed:数据修改三、grep = global regular expression print⽤最简单术语来说,grep(全局正则表达式打印)--命令⽤于查找⽂件⾥符合条件的字符串。
从⽂件的第⼀⾏开始,grep 将⼀⾏复制到 buffer 中,将其与搜索字符串进⾏⽐较,如果⽐较通过,则将该⾏打印到屏幕上。
grep将重复这个过程,直到⽂件搜索所有⾏。
注意这⾥没有进程执⾏ grep 存储⾏、更改⾏或仅搜索部分⾏。
1、⽰例数据⽂件请将以下数据剪切粘贴到⼀个名为 “sampler.log” 的⽂件中:bootbookboozemachinebootsbungiebarkaardvarkbroken$tuffrobots2、⼀个简单例⼦grep 最简单的例⼦是:grep "boo" sampler.log在本例中,grep 将遍历⽂件 “sampler.log” 的每⼀⾏,并打印出其中的每⼀⾏包含单词“boo”:bootbookboozeboots但是如果你操作的是⼤型⽂件,就会出现这种情况:如果这些⾏标识了⽂件中的哪⼀⾏,它们是什么,可能对你更有⽤,如果需要在编辑器中打开⽂件,那么可以更容易地跟踪特定字符串做⼀些改变。
sed和awk的用法
sed和awk都是Linux下常用的文本处理工具,它们都可以用来处理结构化文本文件,具有快速、灵活、高效的特点。
下面是sed和awk的一些常见用法:
sed:
替换:sed 's/old/new/g' file.txt,将文件中的“old”替换为“new”。
删除:sed '1,5d' file.txt,删除文件中的前5行。
追加:sed -i '1i\hello world' file.txt,在文件的第一行前添加“hello world”。
打印:sed '10p' file.txt,打印文件中的第10行。
替换多个文件:sed -i 's/old/new/g' file1.txt file2.txt file3.txt,将文件中的“old”替换为“new”。
awk:
打印:awk '{print $1}' file.txt,打印文件中的第一列。
计算:awk '{sum+=$1} END {print sum}' file.txt,计算文件中的第一列的总和。
分组:awk -F: '{print $1}' file.txt,按照冒号分隔符打印文件中的第一列。
条件判断:awk '$3>10 {print $1}' file.txt,打印文件中第三列大于10的行。
脚本:awk -f script.awk file.txt,执行一个awk脚本文件,对文件进行操作。
Linux三剑客详解(grep、sed、awk)
Linux三剑客详解(grep、sed、awk)前⾔ 在Linux的学习和使⽤当中,⼈们常常提到的三剑客其实指的是grep、sed、awk这三个命令的简称,当熟练掌握了这⼏个命令,可以极⼤的提升运维效率。
在讲到这三个命令之前,我们得先了解什么是正则表达式,正则表达式是学习三剑客的基础和前提。
⼀、正则表达式 正则表达式:Regular Expression,描述了⼀种字符串匹配的模式(pattern),可以⽤来检查⼀个串是否含有某种⼦串、将匹配的⼦串替换或者从某个串中取出复核某个条件的⼦串等。
标准正则表达式:元字符:. 匹配任意单个字符[] 匹配指定范围内的任意单个字符[^] 匹配指定范围外的任意单个字符字符集合:[:alnum:] 代表英⽂⼤⼩写字符及数字,亦即 0~9、A~Z、a~z[:alpha:] 代表任何英⽂⼤⼩写字符,亦即 A~Z、a~z[:blank:] 代表空格键与[tab]按键两者[:cntrl:] 代表键盘上⾯的控制按键,包括CR、LF、Tab、Del等[:digit:] 代表数字⽽已,即 0~9[:graph:] 除了空格符(空格键与[tab]按键)外的其他所有按键[:lower:] 代表⼩写字符,即 a~z[:print:] 代表任何可以被打印出来的字符[:punct:] 代表标点符号(punctuation symbol),亦即 : " ' ? ! ; : # $[:upper:] 代表⼤写字符,即 A~Z[:space:] 代表会产⽣空⽩的字符,包括空格键、[tab]、CR等[:xdigit:] 代表⼗六进制的数字类型,因此包括 0~9、A~F、a~f 的数字与字符匹配次数(贪婪模式):* 匹配其前⾯的字符任意次?匹配其前⾯的字符0次或者1次+ 匹配其前⾯的字符⾄少1次.* 任意长度的任意字符位置锚定:^ 锚定⾏⾸,此字符后⾯的任意内容必须出现在⾏⾸$ 锚定⾏尾,此字符后⾯的任意内容必须出现在⾏尾^$ 空⽩⾏因为在Linux系统中shell解释器的特殊处理,某些元字符在linux下具有展开式等特殊含义,在实际使⽤过程中,我们需要添加 / 对其进⾏转义。
使用sed命令查找和替换文件中的字符串的方法总结
使⽤sed命令查找和替换⽂件中的字符串的⽅法总结当你在使⽤⽂本⽂件时,很可能需要查找和替换⽂件中的字符串。
sed 主要⽤于替换⼀个⽂件中的⽂本。
在中这可以通过使⽤ sed 和 awk 命令来完成。
在本教程中,我们将告诉你使⽤ sed 命令如何做到这⼀点,然后讨论讨论 awk 命令相关的。
使⽤sed 命令查找和替换⽂件中的字符串的⽅法总结使⽤sed 命令查找和替换⽂件中的字符串的⽅法总结sed 命令是什么sed 命令表⽰ Stream Editor(流编辑器),⽤来在 Linux 上执⾏基本的⽂本操作。
它可以执⾏各种功能,如搜索、查找、修改、插⼊或删除⽂件。
此外,它也可以执⾏复杂的正则表达式匹配。
它可⽤于以下⽬的:查找和替换匹配给定的格式的内容。
在指定⾏查找和替换匹配给定的格式的内容。
在所有⾏查找和替换匹配给定的格式的内容。
搜索并同时替换两种不同的模式。
本⽂列出的⼗五个例⼦可以帮助你掌握 sed 命令。
如果要使⽤ sed 命令删除⽂件中的⾏,去下⾯的⽂章。
注意:由于这是⼀篇演⽰⽂章,我们使⽤不带 -i 选项的 sed 命令,该选项会在 Linux 终端中删除⾏并打印⽂件内容。
但是,在实际环境中如果你想删除源⽂件中的⾏,使⽤带 -i 选项的 sed 命令。
常见的 sed 替换字符串的语法。
sed -i 's/Search_String/Replacement_String/g' Input_File⾸先我们需要了解 sed 语法来做到这⼀点。
请参阅有关的细节。
sed:这是⼀个 Linux 命令。
-i:这是 sed 命令的⼀个选项,它有什么作⽤?默认情况下,sed 打印结果到标准输出。
当你使⽤ sed 添加这个选项时,那么它会在适当的位置修改⽂件。
当你添加⼀个后缀(⽐如,-i.bak)时,就会创建原始⽂件的备份。
s:字母 s 是⼀个替换命令。
Search_String:搜索⼀个给定的字符串或正则表达式。
很全的sed&awk 正则表达式手册
Sed (2)sed常用选择项 (2)语法正则表达式 (3)替换 (6)删除 (7)追加插入更改 (7)列表 (7)转换 (7)打印 (7)打印行号 (8)下一步 (8)读和写文件 (8)退出 (8)高级命令 (8)awk (14)分隔符 (14)表达式字符链接 (14)系统内置变量 (16)格式化输出 (17)使用shell 变量 (18)流控制 (18)数组 (20)测试数组成员 (21)函数 (22)高级讲解 (24)域 (24)变量 (26)特殊模式begin end (27)命令参数 (28)Sed 命令sed常用选择项sed/awk +[参数选项]+ “语法“+ 文件名-n 关闭输出到标准输出-e 执行多条sed命令;(或者用“;”间隔多条指令)-f 从命令脚本读如命令Sed –f sed_srcript_file input_filesed/awk的特点均是读入文件的一行做为输入,应用于所有的命令,再读入下一行执行操作:1 从输入文件中读入一行2 为改行做一个拷贝3 在该行上执行“语法”动作4 为下一行执行第一步动作语法正则表达式/pattern/actionPattern 正则表达式Action 执行动作执行过程:1 顺序收索每个模式pattern 直到发现一个匹配2 发现匹配后执行action 动作3 执行完成后,到达下一个action ,执行第一步4 当所有模式试过一遍后,读取下一行。
在第四步前,sed显示被改动的记录,awk必须手动显示改动的内容,Sed可以使用的动作包括编辑单个字母的命令,awk动作通常是一个编程语句集合。
Pattern 包括普通字符和通配符。
. 点号* 星号在此处意思是匹配前面字符出现0次以上[chars] 匹配chars中的任何一个字符,chars是一个字符序列。
可用“-”字符指出字符范围,“^”是chars中的第一个字符,则匹配未在chars中指定的字符^ 匹配一行的开始$ 匹配一行的末\ 转义符号[…] 匹配括弧里面的任意字符,第一字符如果是^表示不包含所列示字符,如果里面包含‟[ ]‟符号时候,表示同时包含‟[]‟,如果是任选之一应写成‟][‟\{n, m\} 匹配前面的匹配n-m次;\{n\}匹配前面的模式n次Egrep 和awk 可以使用的特殊字符…\<‟…\>‟+ 匹配前面的正则表达式1次以上? 匹配前面的正则表达式0次以上| 匹配前面或者后的表达式( ) 对正则表达式分组,设置匹配集合Sed是先对第一个行应用所有编辑命令,在对第二个行。
Linux文本三剑客超详细教程---grep、sed、awk
Linux⽂本三剑客超详细教程---grep、sed、awk awk、grep、sed是linux操作⽂本的三⼤利器,合称⽂本三剑客,也是必须掌握的linux命令之⼀。
三者的功能都是处理⽂本,但侧重点各不相同,其中属awk功能最强⼤,但也最复杂。
grep更适合单纯的查找或匹配⽂本,sed更适合编辑匹配到的⽂本,awk更适合格式化⽂本,对⽂本进⾏较复杂格式处理。
1、grep1.1 什么是grep和egrep Linux系统中grep命令是⼀种强⼤的⽂本搜索⼯具,它能使⽤正则表达式搜索⽂本,并把匹配的⾏打印出来(匹配到的标红)。
grep全称是Global Regular Expression Print,表⽰全局正则表达式版本,它的使⽤权限是所有⽤户。
grep的⼯作⽅式是这样的,它在⼀个或多个⽂件中搜索字符串模板。
如果模板包括空格,则必须被引⽤,模板后的所有字符串被看作⽂件名。
搜索的结果被送到标准输出,不影响原⽂件内容。
grep可⽤于shell脚本,因为grep通过返回⼀个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的⽂件不存在,则返回2。
我们利⽤这些返回值就可进⾏⼀些⾃动化的⽂本处理⼯作。
egrep = grep -E:扩展的正则表达式(除了\< , \> , \b 使⽤其他正则都可以去掉\)1.2 使⽤grep1.2.1 命令格式grep [option] pattern file1.2.2 命令功能⽤于过滤/搜索的特定字符。
可使⽤正则表达式能多种命令配合使⽤,使⽤上⼗分灵活。
1.2.3 命令参数常⽤参数已加粗-A<显⽰⾏数>:除了显⽰符合范本样式的那⼀列之外,并显⽰该⾏之后的内容。
-B<显⽰⾏数>:除了显⽰符合样式的那⼀⾏之外,并显⽰该⾏之前的内容。
-C<显⽰⾏数>:除了显⽰符合样式的那⼀⾏之外,并显⽰该⾏之前后的内容。
Sed and Awk 101 Hacks -中文版
高级字符串处理技巧使用sed和awk进行字符串替换和处理
高级字符串处理技巧使用sed和awk进行字符串替换和处理在计算机编程中,字符串处理是一项非常重要的技能,而使用sed 和awk工具可以帮助我们更加高效和灵活地处理字符串。
本文将介绍sed和awk的基本用法以及一些高级的字符串处理技巧。
一、sed工具sed(Stream Editor)是一个流编辑器,能够对文本进行一行一行的处理,常用于替换、删除、插入字符串等操作。
1. 替换字符串sed命令的替换字符串功能非常强大,格式为:```sed 's/要替换的字符串/新的字符串/g' 文件名```其中,`s`代表substitute,字符串被替换的标志是`/`,`g`表示进行全局替换。
例如,我们要将文件file.txt中的所有"apple"替换为"orange",可以使用以下sed命令:```sed 's/apple/orange/g' file.txt```2. 删除特定行sed还可以删除文件中的特定行,常用的命令是`d`,例如:```sed '2d' file.txt```上述命令将删除文件file.txt中的第二行。
3. 插入字符串sed可以在文件的某一行前或某一行后插入字符串,分别使用命令`i`和`a`。
例如:```sed '2i\This is a new line' file.txt```上述命令将在文件file.txt的第二行前插入"This is a new line"。
二、awk工具awk是一种强大的文本处理工具,它可以用于查找、提取和处理文件中的数据。
它将文件按行分割成字段,通过指定的条件和操作来处理这些字段。
1. 提取特定字段awk默认将每一行的字段分割成为$1、$2、$3...,我们可以使用这些变量来提取特定字段。
例如,提取文件file.txt中的第一列可以使用以下命令:```awk '{print $1}' file.txt```2. 使用条件进行处理awk可以根据条件来处理数据,其中,使用`pattern { action }`的格式。
Shell中的grep awk和sed的常用命令和语法
Shell中的grep、awk和sed的常用命令和语法Shell中的grep、awk和sed的常用命令和语法——oid2000收集整理Grep的常用命令语法1. 双引号引用和单引号引用在g r e p命令中输入字符串参数时,最好将其用双引号括起来。
例如:―m y s t r i n g‖。
这样做有两个原因,一是以防被误解为s h e l l命令,二是可以用来查找多个单词组成的字符串,例如:―jet plane‖,如果不用双引号将其括起来,那么单词p l a n e将被误认为是一个文件,查询结果将返回―文件不存在‖的错误信息。
在调用变量时,也应该使用双引号,诸如:g r e p―$ M Y VA R‖文件名,如果不这样,将没有返回结果。
在调用模式匹配时,应使用单引号.[root@mypc ]# echo `grep 123 111.txt` (#注意是反单引号) 2. 常用的g r e p选项有:-c 只输出匹配行的计数。
-i 不区分大小写(只适用于单字符)。
-h 查询多文件时不显示文件名。
-l 查询多文件时只输出包含匹配字符的文件名。
-n 显示匹配行及行号。
-s 不显示不存在或无匹配文本的错误信息。
-v 显示不包含匹配文本的所有行。
3. 特殊的——在多个文件中进行查询$ grep "sort"*.doc ( #在当前目录下所有. d o c文件中查找字符串―s o r t‖)$ grep "sort it" * (#或在所有文件中查询单词―sort it‖)接下来的所有示例是指在单个文件中进行查询4. 行匹配$ grep -c "48" data.f$ 4 (#g r e p返回数字4,意义是有4行包含字符串―4 8‖。
)$ grep "48" data.f (#显示包含―4 8‖字符串的4行文本)5. 显示满足匹配模式的所有行行数:[root@mypc oid2000]# grep -n 1234 111.txt1:12343:1234ab6. 精确匹配[root@mypc oid2000]# grep "1234\>" 111.txt12347. 查询空行,查询以某个条件开头或者结尾的行。
