Linux 正则表达式与三剑客sed 篇七、sed流编辑器1、sed 命令语法及参数说明sed 是 Stream Editor字符流编辑器的缩写简称流编辑器。是Linux三剑客之一。sed 是操作、过滤和转换文本内容的强大工具。sed 的常用功能包含对文件实现快速增删改查增加、删除、修改、查询其中查询的功能中最常用的两大功能是过滤过滤指定字符串和取行取出指定的行。语法格式 sed [选项] [sed内置命令字符] [输入文件]为了避免混淆本文称呼 sed 为 sed 或 sed 命令将实现不同 sed 功能的内部命令参数称为 “sed 内置命令字符”以区别于是 sed 命令还是 sed 内置命令选项。“sed 内置命令字符” 既可以是单个命令也可以是多个命令参数的组合。“输入文件” 为 sed 需要处理的文件是可选项sed 还能从标准输入如管道获取输入。下表针对 sed 命令的参数选项进行了说明。sed 的内置命令字符可用来实现对文件的不同操作功能例如对文件的增删改查等下表为 sed 的内置命令字符说明。2、sed 命令应用实践准备测试文件如下cat -n oldboy.txt问题1输出 oldboy.txt 第 2-3 行的内容。解答这个问题考察的是 sed 的 -n 参数及 p 功能字符的使用方法 该命令十分常用在实际工作中它会输出大文件中间的若干行。sed -n 2,3p oldboy.txt # -n 表示默认不输出根据要求输出第 2-3 行输出用 p。问题2过滤出含有 oldboy 字符串的行解答这里是考察 sed 命令的过滤功能类似于 grep 的过滤不同的是需要用双斜线将需要过滤的字符串包含在中间。sed -n /oldboy/p oldboy.txt # -n 表示默认不输出利用 p 输出包含 oldboy 的行。问题3删除含有 oldboy 字符串的行。解答这是考察 sed 命令的删除功能d 字符默认不会修改文件如果需要修改文件则要用 -i 参数配合。sed /oldboy/d oldboy.txt # 用 d 符号删除包含 oldboy 的行问题4将文件中的 oldboy 字符串全部替换为 oldgirl。解答这是考察 sed 命令的替换功能默认不会修改文件如果需要修改文件则要用 -i 参数配合这个命令在工作中比较常用。sed s#oldboy#oldgirl#g oldboy.txt上面命令行中的 s 加 g 表示全局替换中间的间隔符可以用 “#/” 等符号替代前两个 “#” 号之间表示想要替换的内容后两个 “#” 号之间表示替换后的内容。问题5将文件中的 oldboy 字符串全部替换为 oldgirl同时将 QQ 号码 49000448 改为 31333741。解答这是考察 sed 命令的 -e 参数多项编辑功能。sed -e s#oldboy#oldgirl#g -e s#49000448#31333741#g oldboy.txt问题6在 oldboy.txt 文件的第 2 行后追加文本。解答这是考察 sed 命令的 a 字符功能。sed -i 2a I teach linux. oldboy.txt # 这里使用了sed内置命令a追加功能在第二行后面增加一行。 cat oldboy.txt提示 也可以同时增加多行不同的行之间使用 “\n” 间隔开。问题7在 oldboy.txt 文件的第 2 行插入文本。解答考察 sed 命令的 i 字符功能。sed -i 2i I teach linux, at 2i. oldboy.txt cat -n oldboy.txt问题8在 oldboy.txt 文件的第 2 行插入两行文本。解答使用 ”\n“ 来显示两行文本。sed 2i I teach linux.\nYou are my student. oldboy.txt3、sed 配合正则表达式的企业案例问题1取出 Linux 中执行 ifconfig eth0 后对应的 IP 地址只能输出 IP 地址。方法1利用正则加 sed 替换功能获取 IP。步骤1ifconfig eth0 # 查看网卡 eth0 信息找到 IP 地址步骤2首先找到第 2 行然后去掉目标 10.0.0.7 这个 IP 之前的内 容可使用 sed 的替换功能来实现。正则表达式的匹配技巧处理所需要的目标获取的 IP前的字符串一般以 “…” 开头^.*来匹配最后将目标 IP 前的结尾写上实际的字符串这里的字符串必须要唯一否则就会贪婪匹配到最后一个相同的字符串匹配的正则和实际要处理的第二行其匹配关系如下图所示。ifconfig eth0|sed -n 2s#^.*inet##gp其中-n 默认不输出2s 表示处理第 2 行“#^.*inet #” 表示匹配 IP 地址前的所有内容这里的空格暂且忽略“##gp” 表示全局替换为空内容并打印输出替换后的内容。步骤3在步骤 2 的基础上再去掉目标 192.168.21.10 这个 IP 后的所有内容这里也是使用 sed 的替换功能来实现。正则表达式匹配技巧匹配目标后的字符串一般紧接目标获取的 IP之后匹配的正则表达式开头应写上实际的字符串这里的字 符串必须要唯一否则就会贪婪匹配到最后一个相同的字符串 再结尾则是以 “…” 结尾.*$来匹配。ifconfig eth0|sed -n 2s#^.*inet##gp|sed -n s#netm.*$##gp注意最后一个管道后面的才是这次匹配的命令-n 默认不输出 #netm.*$# 匹配了 IP 后面的所有字符紧接着 IP 后的两个空格先暂且忽略“##” 表示替换为空然后输出剩下的内容就只有 IP 地址了。ifconfig eth0|sed -n 2s#^.*inet ##gp|sed -n s# netm.*$##gp # inet 后面匹配一个空格netm 前面匹配两个空格。方法2-e 多项编辑可以减少管道的使用ifconfig eth0|sed -ne 2s#^.*inet ##g -ne 2s# netm.*$##gp方法3利用正则的 “” 小括号和 “\n” 后向引用功能加上替换来实现。ifconfig eth0|sed -nr 2s#^.*inet (.*) netm.*$#\1#gp“-r” 表示支持扩展的正则表达式“\1” 用于获取小括号的内容输出为什么.*就匹配到了 IP 呢这 是因为它前面明确匹配到字符串了后面的开头也给出了固定匹配的字符串因此中间的 “.” 就只能是匹配 IP 了也就是说根据目标前后匹配的结果就能知道中间的内容了。
Linux 正则表达式与三剑客(sed 篇)
Linux 正则表达式与三剑客sed 篇七、sed流编辑器1、sed 命令语法及参数说明sed 是 Stream Editor字符流编辑器的缩写简称流编辑器。是Linux三剑客之一。sed 是操作、过滤和转换文本内容的强大工具。sed 的常用功能包含对文件实现快速增删改查增加、删除、修改、查询其中查询的功能中最常用的两大功能是过滤过滤指定字符串和取行取出指定的行。语法格式 sed [选项] [sed内置命令字符] [输入文件]为了避免混淆本文称呼 sed 为 sed 或 sed 命令将实现不同 sed 功能的内部命令参数称为 “sed 内置命令字符”以区别于是 sed 命令还是 sed 内置命令选项。“sed 内置命令字符” 既可以是单个命令也可以是多个命令参数的组合。“输入文件” 为 sed 需要处理的文件是可选项sed 还能从标准输入如管道获取输入。下表针对 sed 命令的参数选项进行了说明。sed 的内置命令字符可用来实现对文件的不同操作功能例如对文件的增删改查等下表为 sed 的内置命令字符说明。2、sed 命令应用实践准备测试文件如下cat -n oldboy.txt问题1输出 oldboy.txt 第 2-3 行的内容。解答这个问题考察的是 sed 的 -n 参数及 p 功能字符的使用方法 该命令十分常用在实际工作中它会输出大文件中间的若干行。sed -n 2,3p oldboy.txt # -n 表示默认不输出根据要求输出第 2-3 行输出用 p。问题2过滤出含有 oldboy 字符串的行解答这里是考察 sed 命令的过滤功能类似于 grep 的过滤不同的是需要用双斜线将需要过滤的字符串包含在中间。sed -n /oldboy/p oldboy.txt # -n 表示默认不输出利用 p 输出包含 oldboy 的行。问题3删除含有 oldboy 字符串的行。解答这是考察 sed 命令的删除功能d 字符默认不会修改文件如果需要修改文件则要用 -i 参数配合。sed /oldboy/d oldboy.txt # 用 d 符号删除包含 oldboy 的行问题4将文件中的 oldboy 字符串全部替换为 oldgirl。解答这是考察 sed 命令的替换功能默认不会修改文件如果需要修改文件则要用 -i 参数配合这个命令在工作中比较常用。sed s#oldboy#oldgirl#g oldboy.txt上面命令行中的 s 加 g 表示全局替换中间的间隔符可以用 “#/” 等符号替代前两个 “#” 号之间表示想要替换的内容后两个 “#” 号之间表示替换后的内容。问题5将文件中的 oldboy 字符串全部替换为 oldgirl同时将 QQ 号码 49000448 改为 31333741。解答这是考察 sed 命令的 -e 参数多项编辑功能。sed -e s#oldboy#oldgirl#g -e s#49000448#31333741#g oldboy.txt问题6在 oldboy.txt 文件的第 2 行后追加文本。解答这是考察 sed 命令的 a 字符功能。sed -i 2a I teach linux. oldboy.txt # 这里使用了sed内置命令a追加功能在第二行后面增加一行。 cat oldboy.txt提示 也可以同时增加多行不同的行之间使用 “\n” 间隔开。问题7在 oldboy.txt 文件的第 2 行插入文本。解答考察 sed 命令的 i 字符功能。sed -i 2i I teach linux, at 2i. oldboy.txt cat -n oldboy.txt问题8在 oldboy.txt 文件的第 2 行插入两行文本。解答使用 ”\n“ 来显示两行文本。sed 2i I teach linux.\nYou are my student. oldboy.txt3、sed 配合正则表达式的企业案例问题1取出 Linux 中执行 ifconfig eth0 后对应的 IP 地址只能输出 IP 地址。方法1利用正则加 sed 替换功能获取 IP。步骤1ifconfig eth0 # 查看网卡 eth0 信息找到 IP 地址步骤2首先找到第 2 行然后去掉目标 10.0.0.7 这个 IP 之前的内 容可使用 sed 的替换功能来实现。正则表达式的匹配技巧处理所需要的目标获取的 IP前的字符串一般以 “…” 开头^.*来匹配最后将目标 IP 前的结尾写上实际的字符串这里的字符串必须要唯一否则就会贪婪匹配到最后一个相同的字符串匹配的正则和实际要处理的第二行其匹配关系如下图所示。ifconfig eth0|sed -n 2s#^.*inet##gp其中-n 默认不输出2s 表示处理第 2 行“#^.*inet #” 表示匹配 IP 地址前的所有内容这里的空格暂且忽略“##gp” 表示全局替换为空内容并打印输出替换后的内容。步骤3在步骤 2 的基础上再去掉目标 192.168.21.10 这个 IP 后的所有内容这里也是使用 sed 的替换功能来实现。正则表达式匹配技巧匹配目标后的字符串一般紧接目标获取的 IP之后匹配的正则表达式开头应写上实际的字符串这里的字 符串必须要唯一否则就会贪婪匹配到最后一个相同的字符串 再结尾则是以 “…” 结尾.*$来匹配。ifconfig eth0|sed -n 2s#^.*inet##gp|sed -n s#netm.*$##gp注意最后一个管道后面的才是这次匹配的命令-n 默认不输出 #netm.*$# 匹配了 IP 后面的所有字符紧接着 IP 后的两个空格先暂且忽略“##” 表示替换为空然后输出剩下的内容就只有 IP 地址了。ifconfig eth0|sed -n 2s#^.*inet ##gp|sed -n s# netm.*$##gp # inet 后面匹配一个空格netm 前面匹配两个空格。方法2-e 多项编辑可以减少管道的使用ifconfig eth0|sed -ne 2s#^.*inet ##g -ne 2s# netm.*$##gp方法3利用正则的 “” 小括号和 “\n” 后向引用功能加上替换来实现。ifconfig eth0|sed -nr 2s#^.*inet (.*) netm.*$#\1#gp“-r” 表示支持扩展的正则表达式“\1” 用于获取小括号的内容输出为什么.*就匹配到了 IP 呢这 是因为它前面明确匹配到字符串了后面的开头也给出了固定匹配的字符串因此中间的 “.” 就只能是匹配 IP 了也就是说根据目标前后匹配的结果就能知道中间的内容了。