Linux三剑客之sed(一)

1.sed命令语法

       1. sed基本语法:

        sed [options] {sed-commands} {input-file}

        sed是每次从input-file中读取一行记录,并在该记录上执行sed-commands,首先从input-file中读取第一行,然后执行所有的sed-commands;再读取第二行,执行所有sed-commans,重复这个过程,直到该文件结束。

        例如:打印出/etc/passwd文件中的所有行

 sed -n 'p' /etc/passwd

        2.sed脚本基本语法:

        sed [options] -f {sed-commands-in a file} {input-file}

        例如:打印/etc/passwd 中以root和nobody开头的行:

        先将脚本保存在文档中

$ vi test-script.sed
/^root/ p
/^nobody/ p

        再

sed -n -f test-script.sed /etc/passwd

        3.sed多项命令执行:

        使用-e选项,执行多个sed命令

        sed [options] -e {sed-command} -e {sed-command2} {inputfile}

        例如:打印/etc/passwd中以root和nobody开头的行:

sed –n –e ‘/^root/ p’ –e ‘/^nobody/ p’ /etc/passwd

        也可以使用\把它们分隔到多行执行:

 # sed -n \
> -e '/^root/ p' \
> -e '/^nobody/ p' \
> /etc/passwd
root:x:0:0:root:/root:/bin/bash
nobody:x:99:99:Nobody:/:/sbin/nologin

        还可以使用 {}将多个命令分组执行:

        sed [options] '{

        sed-command1

        sed-command2

        }' inputfile

        例如:

# sed -n '{
> /^root/p
> /^nobody/p
> }' /etc/passwd
root:x:0:0:root:/root:/bin/bash
nobody:x:99:99:Nobody:/:/sbin/nologin

        注意:sed不会修改原始文件,它只是将结果内容输出到标准输出设备。

2.sed脚本执行流程

        顺序:read-execute-print-repeat(读取-执行-打印-重复),简称REPR

        读取一行到模式空间(sed内部的一个临时缓存,存放读取到的内容)

        再在模式空间中执行命令。若使用了多个命令({}、-e等),则依次执行

        重复以上过程,直到文件读取结束

3.打印模式空间(p)

        使用p命令,可以打印当前模式空间的内容。

        sed在执行完成后会默认打印模式空间的内容,那为何还要使用p呢?

        命令p可以控制只输出你指定的内容。通常使用p时,还需要使用-n来屏蔽sed的默认输出,否则当执行命令p时,每行记录会输出两次。

        例如:打印1234.txt

# sed 'p' 1234.txt
1 2 3 6 9 78 44
1 2 3 6 9 78 44
55 44 9 6 3 7 4
55 44 9 6 3 7 4
# sed -n 'p' 1234.txt
1 2 3 6 9 78 44
55 44 9 6 3 7 4

        1.指定地址范围   

        1.只打印第二行:

# sed -n '2 p' employee.txt
102,Jason Smith,IT Manager

        2.打印第一行至第四行:

# sed -n '1,4 p' employee.txt
101,John Doe,CEO
102,Jason Smith,IT Manager
103,Raj Reddy,Sysadmin
104,Anand Ram,Developer

        3.打印第二行至第最后行:

# sed -n '2,$ p' employee.txt
102,Jason Smith,IT Manager
103,Raj Reddy,Sysadmin
104,Anand Ram,Developer
105,Jane Miller,Sales Manager

        2.修改地址范围

        逗号:n,m表示第n行至第m行;

        +号:n,+m表示从第n行开始后的m行

        ~号:指定每次要跳过的行数。n~m表示从第n行开始,每次跳过m行:

        1~2:匹配1,3,5,7......

        2~2:匹配2,4,6,8......

        只打印计数行:

# sed -n '1~2 p' employee.txt
101,John Doe,CEO
103,Raj Reddy,Sysadmin
105,Jane Miller,Sales Manager

        3.模式匹配

        使用数字指定地址(或地址范围),也可以使用一个模式(或模式范围)来匹配。

        1.打印匹配模式“Jane”的行:

# sed -n '/Jane/p' employee.txt
105,Jane Miller,Sales Manager

        2.打印第一次匹配Jason的行至第四行的内容:

# sed -n '/Jason/,4p' employee.txt
102,Jason Smith,IT Manager
103,Raj Reddy,Sysadmin
104,Anand Ram,Developer

        如果开始的四行中没有匹配到Jason,那么会打印第四行以后匹配到Jason的内容

        3.打印自匹配到Raj的行开始到匹配Jane的行之间的所有内容:

# sed -n '/Raj/,/Jane/p' employee.txt
103,Raj Reddy,Sysadmin
104,Anand Ram,Developer
105,Jane Miller,Sales Manager

        4.打印匹配Jason的行和其后面的两行

# sed -n '/Jane/,+2 p' employee.txt

4.删除行

        d用来删除行,它只删除模式空间的内容,不会修改原始内容。

        一般删除配合地址范围更有用:

        1.只删除第二行:

# sed '2d' employee.txt
101,John Doe,CEO
103,Raj Reddy,Sysadmin
104,Anand Ram,Developer
105,Jane Miller,Sales Manager

        2.删除第一行至第四行:

# sed '1,4d' employee.txt
105,Jane Miller,Sales Manager

        3.删除奇数行:

# sed '1~2d' employee.txt
102,Jason Smith,IT Manager
104,Anand Ram,Developer

        4.删除匹配Manager的行:

# sed '/Manager/ d' employee.txt
101,John Doe,CEO
103,Raj Reddy,Sysadmin
104,Anand Ram,Developer

        5.删除所有空行:

# sed '/^$/ d' employee.txt

4.将模式空间内容写入到文件

        w命令可以把当前模式空间的内容保存到文件中。一般执行命令后会输出到屏幕,如不输出用上-n。

        把employee.txt内容保存到文件ems.txt,显示在屏幕上:

# sed 'w ems.txt' employee.txt
101,John Doe,CEO
102,Jason Smith,IT Manager
103,Raj Reddy,Sysadmin
104,Anand Ram,Developer
105,Jane Miller,Sales Manag

        保存1-4行:

# sed '1,4 w ems.txt' employee.txt

        保存匹配到Raj的行至最后一行:

# sed -n '/Raj/,$ w ems.txt' employee.txt

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Linux三剑客指的是 awk、sed 和 grep。 awk 是一种用来处理文本文件的工具,它可以根据指定的模式进行自动分割并进行数据处理。 sed 是一种流编辑器,它可以对文本文件进行替换、删除和插入操作。 grep 是一种文本搜索工具,它可以在文本文件中搜索指定的字符串。 ### 回答2: Linux三剑客,分别是awk、sed和grep,它们是Linux系统中非常重要的命令行工具,它们通常被称为文本处理工具。这些工具通常被用于筛选、搜索和处理文本文件。 grep是一种常见的文本搜索工具,可以在文件和文件夹中搜索指定的字符串或正则表达式。grep可以搜索多个文件并返回匹配行的输出。它是处理日志文件或查找匹配模式的最佳工具之一。 sed是一种流编辑器,可以按照行处理文本文件。它可以通过替换、删除和插入操作来修改文件内容。在大型文件中查找并替换模式是sed的主要作用。该工具通常在文本文件中提取有用信息是常用。 awk是一种强大的文本操作工具,可以分析大型文本文件并对其进行处理。该工具可以遍历行和列,并提供强大的文本处理工具,如计算、过滤和转换数据。awk的处理速度非常快,适用于处理大型数据文件。 Linux三剑客中awk是最强大的工具,它可以执行复杂的文本数据操作和转换,可大大简化开发和管理过程。sed主要用于简单的文本数据过滤和替换,而grep主要用于搜索文件和定位特定行。 总之,Linux三剑客在文本数据处理方面具有不可替代的重要作用。对于Linux操作系统的开发人员和管理员来说,熟练使用这些工具可以提高他们的工作效率,使他们更容易管理和操作文本文件。 ### 回答3: Linux三剑客awk sed grep是我们在日常工作中经常使用的三个命令。它们都属于文本处理工具,可以用于查找、处理、分析文本文件等。 首先,grep是最常用的文本搜索工具。grep可以用来快速查找文件中指定的字符串或正则表达式,并将包含该字符串或正则表达式的行打印出来。常用的命令有grep、egrep和fgrep。比如,我们可以使用grep命令来查找一个文件中包含指定关键字的行,可以使用egrep来支持正则表达式搜索,使用fgrep来进行快速搜索,不支持正则表达式。 其次,sed是一种流编辑器,主要用于对文本文件进行替换、删除、添加、插入等操作。sed命令可以通过管道(|)将多个命令组合起来,从而进行复杂的文本操作。sed可以快速完成对文本文件的修改操作,比如替换文件中的某些内容、删除特定的行、在文件中插入新的文本等。sed命令形式是“command", 比如"s/old/new/g",表示将old替换成new。 最后,awk是一种强大的文本处理工具,主要用于在文本文件中查找、处理以及格式化特定的字段。和grep、sed不同的是,awk更加灵活,可以在处理过程中做到数据过滤和加工,对于大数据的处理特别有用。awk命令的常用语法是"pattern {action}"。其中,pattern代表要匹配的模式,而action代表模式匹配时需要执行的动作,我们可以在其中添加处理语句来对文件进行各种处理操作,比如计算、统计、格式化等。 综上所述,Linux三剑客awk sed grep是我们在文本处理工作中不可或缺的三个工具,不同的工具可以用于处理不同的文本操作,也可以用于搭配使用,以完成更加复杂的文本处理工作。对于需要经常处理文本的人员来说,掌握这些工具是非常必要的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值