首页IT科技linux中gun命令的含义(在Linux上使用GNU sed的方法)

linux中gun命令的含义(在Linux上使用GNU sed的方法)

时间2025-09-19 07:45:17分类IT科技浏览6250
导读:Linux 基金会宣布了一个全新的 LFCS(Linux 基金会认证系统管理员(Linux Foundation Certified Sysadmin))认证计划。这一计划旨在帮助遍布全世界的人们获得其在处理 Linux 系统管理任务上能力的认证。这些能力包括支持运行的系统服务,以及第一手的故障诊断、分析,以及为工程师团队在升级时...

Linux 基金会宣布了一个全新的 LFCS(Linux 基金会认证系统管理员(Linux Foundation Certified Sysadmin))认证计划                 。这一计划旨在帮助遍布全世界的人们获得其在处理 Linux 系统管理任务上能力的认证                         。这些能力包括支持运行的系统服务                 ,以及第一手的故障诊断                 、分析                         ,以及为工程师团队在升级时提供明智的决策         。

处理 Linux 中的文本流

Linux 将程序中的输入和输出当成字符流或者字符序列                 。在开始理解重定向和管道之前         ,我们必须先了解三种最重要的I/O(输入和输出(Input and Output))流                 ,事实上                         ,它们都是特殊的文件(根据 UNIX 和 Linux 中的约定         ,数据流和外围设备(设备文件)也被视为普通文件)                         。

在 > (重定向操作符) 和 | (管道操作符)之间的区别是:前者将命令与文件相连接        ,而后者将命令的输出和另一个命令相连接         。

# command >file

# command1 | command2

由于重定向操作符会静默地创建或覆盖文件                         ,我们必须特别小心谨慎地使用它                 ,并且永远不要把它和管道混淆起来        。在 Linux 和 UNIX 系统上管道的优势是:第一个命令的输出不会写入一个文件而是直接被第二个命令读取                         。

在下面的操作练习中        ,我们将会使用这首诗——《A happy child》(作者未知)

使用 sed

sed是流编辑器(stream editor)的缩写                 。为那些不懂术语的人额外解释一下                         ,流编辑器是用来在一个输入流(文件或者管道中的输入)执行基本的文本转换的工具        。

sed最基本的用法是字符替换                         。我们将通过把每个出现的小写 y 改写为大写 Y 并且将输出重定向到 ahappychild2.txt 开始                 。g 标志表示 sed 应该替换文件每一行中所有应当替换的实例。如果这个标志省略了                 ,sed 将会只替换每一行中第一次出现的实例

基本语法:

#seds/term/replacement/flagfile

我们的样例:

#seds/y/Y/g ahappychild.txt > ahappychild2.txt

如果你要在替换文本中搜索或者替换特殊字符(如 /,\                         ,&)                         ,你需要使用反斜杠对它进行转义                         。

例如,我们要用一个符号来替换一个文字                 ,与此同时我们将把一行最开始出现的第一个 I 替换为 You                         。

#seds/and/\&/g;s/^I/You/g ahappychild.txt

在上面的命令中                         ,众所周知 ^(插入符号)是正则表达式中用来表示一行开头的符号。

正如你所看到的         ,我们可以通过使用分号分隔以及用括号包裹来把两个或者更多的替换命令(并在它们中使用正则表达式)连接起来                 。

另一种 sed 的用法是显示或者删除文件中选中的一部分                         。在下面的样例中                 ,将会显示 /var/log/messages 中从6月8日开始的头五行         。

#sed-n /^Jun 8/ p/var/log/messages |sed-n 1,5p

请注意                         ,在默认的情况下         ,sed 会打印每一行                 。我们可以使用 -n 选项来覆盖这一行为并且告诉 sed 只需要打印(用 p来表示)文件(或管道)中匹配的部分(第一个命令中指定以“Jun 8                 ” 开头的行        ,第二个命令中指定一到五行)                         。

最后                         ,可能有用的技巧是当检查脚本或者配置文件的时候可以保留文件本身并且删除注释         。下面的单行 sed 命令删除(d)空行或者是开头为#的行(| 字符对两个正则表达式进行布尔 OR 操作)        。

#sed/^#\|^$/d apache2.conf

uniq 命令

uniq命令允许我们返回或者删除文件中重复的行                 ,默认写到标准输出                         。我们必须注意到        ,除非两个重复的行相邻                         ,否则uniq 命令不会删除他们                 。因此                 ,uniq 经常和一个前置的 sort 命令(一种用来对文本行进行排序的算法)搭配使用        。默认情况下,sort 使用第一个字段(用空格分隔)作为关键字段                         。要指定一个不同的关键字段                         ,我们需要使用 -k 选项                 。

样例

du –sch /path/to/directory/* 命令将会以人类可读的格式返回在指定目录下每一个子文件夹和文件的磁盘空间使用情况(也会显示每个目录总体的情况)                         ,而且不是按照大小输出,而是按照子文件夹和文件的名称。我们可以使用下面的命令来让它通过大小排序                         。

#du-sch /var/* | sort -h

你可以通过使用下面的命令告诉 uniq 比较每一行的前6个字符(-w 6)(这里是指定的日期)来统计日志事件的个数                 ,而且在每一行的开头输出出现的次数(-c)                         。

#cat/var/log/mail.log |uniq-c -w6

声明:本站所有文章                         ,如无特殊说明或标注         ,均为本站原创发布。任何个人或组织                 ,在未征得本站同意时                         ,禁止复制                          、盗用        、采集        、发布本站内容到任何网站                          、书籍等各类媒体平台                 。如若本站内容侵犯了原著者的合法权益         ,可联系我们进行处理                         。

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
网络不通应该怎么检查路由器(网络不通应该怎么检查?)