GNU sed

大数据教程(2.9):Linux命令sed详解

你离开我真会死。 提交于 2019-11-29 17:10:59
1. Sed简介 sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。以下介绍的是Gnu版本的Sed 3.02。 2. 定址 可以通过定址来定位你所希望编辑的行,该地址用数字构成,用逗号分隔的两个行数表示以这两行为起止的行的范围(包括行数表示的那两行)。如1,3表示1,2,3行,美元符号($)表示最后一行。范围可以通过数据,正则表达式或者二者结合的方式确定 。 3. Sed命令 调用sed命令有两种形式: * sed [options] 'command' file(s) * sed [options] -f scriptfile file(s) a\ 在当前行后面加入一行文本。 b lable 分支到脚本中带有标记的地方,如果分支不存在则分支到脚本的末尾。 c\ 用新的文本改变本行的文本。 d 从模板块(Pattern space)位置删除行。 D 删除模板块的第一行。 i\ 在当前行上面插入文本。 h 拷贝模板块的内容到内存中的缓冲区。 H

正则三剑客grep、sed、awk

血红的双手。 提交于 2019-11-29 17:10:29
正则 正则就是一串有规律的字符串,掌握好正则对于编写shell脚本有很大帮助,各种编程语言中都有正则,原理是一样的 正则三剑客 grep sed awk grep grep用法:grep [参数] '关键字' 文件名 #关键词也可以是正则表达式 grep [-cinvABC] 'word' filename -c 统计包含'关键字'的行数。既使一行有多个关键字,也会按一行计算。 -i 筛选'关键字'时不区分大小写。 -n 筛选'关键字'时显示关键字所在的行号。 -v 反向选择,也就是'关键字'以外的内容。 -r 查询关键词时遍历路径下的子目录。 -An 这里的n是一个数字。作用是过滤出符合要求的行以及下面的“n”行。 -Bn 同上,区别为符合要求的行以及上面的“n”行。 -Cn 同上,区别为符合要求的行以及上下的各“n”行。 grep -n 'root' /etc/passwd #显示出现root的行数 grep -nv 'nologin' /etc/passwd #不显示出现root的行数 grep '[0-9]'/etc/inittab #显示 /etc/inittab文件下出现0-9关键词的行数 grep -v '[0-9]'/etc/inittab #显示 /etc/inittab文件下出现0-9关键词之外的行数 grep -v '^#' /etc/inittab #

格式化输出xml

纵饮孤独 提交于 2019-11-29 13:32:52
题目要求 linux系统 /home目录下有一个文件test.xml,内容如下: <configuration> <artifactItems> <artifactItem> <groupId>zzz</groupId> <artifactId>aaa</artifactId> </artifactItem> <artifactItem> <groupId>xxx</groupId> <artifactId>yyy</artifactId> </artifactItem> <!-- </artifactItem><groupId>some groupId</groupId> <version>1.0.1.2.333.555</version> </artifactItem>--> </artifactItems> </configuration> 请写出shell脚本删除文件中的注释部分内容,获取文件中所有artifactItem的内容,并用如下格式逐行输出>: artifactItem:groupId:artifactId:aaa 参考答案 #!/bin/bash #这个脚本用来格式化xml文件 #作者:猿课-阿铭 www.apelearn.com #日期:2018-12-11 sed '/<!--.*-->/d' test.xml > test2.xml egrep -n '<

打印正方形

别等时光非礼了梦想. 提交于 2019-11-29 13:32:05
题目要求 交互式脚本,根据提示,需要用户输入一个数字作为参数,最终打印出一个正方形。在这里我提供一个linux>下面的特殊字符■,可以直接打印出来。 示例: 如果用户输入数字为5,则最终显示的效果为 ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ 参考答案 #!/bin/bash #这个脚本用来打印正方形 #作者:猿课-阿铭 www.apelearn.com #日期:2018-12-11 while : do read -p "Please input a nuber: " n n1=`echo $n|sed 's/[0-9]//g'` if [ -n "$n1" ] then echo "$n is not a nuber." continue else break fi done for i in `seq 1 $n` do for j in `seq 1 $n` do echo -n "■ " done echo done 来源: https://my.oschina.net/u/3954059/blog/3105911

比较两个数大小

怎甘沉沦 提交于 2019-11-29 13:27:40
题目要求 写一个shell脚本,比较两个数的大小,支持浮点数,两个数通过shell参数的形式提供。 参考答案 #!/bin/bash #这个脚本用来比较两个数大小 #作者:猿课-阿铭 www.apelearn.com #日期:2018-12-05 if [ $# -ne 2 ] then echo "请提供两个参数." exit fi if_number() { if echo $1|grep -q '^-' then nu=`echo $1|sed 's/^-//'` else nu=$1 fi n=`echo $nu|sed 's/[0-9.]//g'` if [ -n "$n" ] then echo "$1不是合法数字." exit fi if echo $1|grep -q '^\.' then echo "$1不是合法数字." exit fi } if_number $1 if_number $2 n1=`echo "$1>$2"|bc` if [ $n1 -eq 1 ] then echo "$1 > $2" else if [ "$1" == "$2" ] then echo "$1 = $2" else echo "$1 < $2" fi fi 来源: https://my.oschina.net/u/3954059/blog/3105896

Linux Shell DAY23

六月ゝ 毕业季﹏ 提交于 2019-11-29 10:00:21
56.给文件增加内容 57.备份etc目录 58.找出重复的单词 59.人员分组 60.比较两个数大小 给文件增加内容 题目要求 在文本文档1.txt第5行(假设文件行数大于5)后面增加如下内容: # This is a test file. # Test insert line into this file. 核心要点 1.给文档指定行后面增加内容,可以用sed搞定 sed -i ‘5a12345\n56789’ 1.txt 2.比较笨的方法是,依次按顺序打印前5行,然后打印要增加的行,再从文本第6行开使一直到结束依次打印剩余的行。 代码 #!/bin/bash #这个脚本用来给文件增加行 n=0 cat 1.txt |while read line do n=$\[$n+1\] if \[ $n -eq 5 \] then echo $line echo -e "# This is a test file.\\n# Test insert line into this file." else echo $line fi done 备份etc目录 题目要求 设计一个shell程序,在每月第一天备份并压缩/etc目录的所有内容,存放在/root/bak目录里,且文件名为如下形式"yymmdd_etc.tar.gz",yy为年,mm为月,dd为日。 核心要点 1

打印数字

寵の児 提交于 2019-11-29 09:40:25
题目要求 写一个shell脚本。提示输入一个暂停的数字,然后从1打印到该数字。然后询问是否继续。继续的话再输入一 个数字接着打印,否则退出脚本。 例:如果输入的是5,打印1 2 3 4 5,然后继续输入15,然后打印6 7 …14 15 以此类推。 参考答案 #!/bin/bash #这个脚本用来打印数字 #作者:猿课-阿铭 www.apelearn.com #日期:2018-11-01 read -p "Please input a number: " n n1=`echo $n |sed 's/[0-9]//g'` if [ -n "$n1" ] then echo "Please input a number." exit fi for i in `seq 1 $n` do echo $i done read -p "If continue? y/n" c case $c in n|N) exit ;; y|Y) read -p "Please input a number: " n2 n3=`echo $n2|sed 's/[0-9]//g'` if [ -n "$n3" ] then echo "Please input a number." exit fi if [ $n2 -le $n ] then echo "$n2 should grater than $n."

linux下grep、awk和sed工具用法概览

泪湿孤枕 提交于 2019-11-29 09:07:27
linux下grep、awk和sed工具用法概览 在linux下, grep、awk和sed 是非常强大的文本处理工具,其中grep命令主要用作文本搜索,而awk和sed命令侧重于文本的编辑等操作,另外awk本身还可以是编程语言,提供了编程语言中相关的概念。从功能上,总的来说, awk >> sed >> grep 。 grep命令 grep命令主要用于 按行 文本 搜索 ,搜索的条件以正则表达式给出。grep在linux下的帮助说明如下: 上面给出的说明较多,这里提取一些较为重要且常用的选项加以说明。 -E 使用扩展正则表达式规则 -F 搜索固定字符串,这里表示的是模式中的内容不使用正则表达式规则去处理 -G 使用基础正则表达式,这里指的是由posix规范定义的正则表达式规则集,相比于我们日常使用较多的pcre正则表达式少了部分规则 -P 使用pcre正则表达式规则集 -r 递归搜索整个目录 具体用法可参考下面的代码: # 搜索ubuntu下qt5的相关库 apt search libqt5 # 搜索ubuntu下qt5相关库,并过滤出所有dev开发包 apt search libqt5 | grep -E "^libqt5.+dev" # posix基础正则集,不支持定位符,无结果 apt search libqt5 | grep -G "^libqt5.+dev" #

Linux自动网络装机 —— Cobbler

故事扮演 提交于 2019-11-29 08:50:24
前言: 最近整理一些以前的学习笔记。 过去都是存储在本地,此次传到网络留待备用。 Cobbler 补鞋匠,快速建立linux网络装机环境,降低了linux装机的技术门槛 官网: http://cobbler.github.io/ ps: VMWare使用默认桥接即可 KVM需要创建桥接,否则不能使用pxe批量安装 一、搭建Cobbler服务 0.初始环境 ]# yum-config-manager --add-repo http://mirrors.aliyun.com/repo/epel-7.repo #部署yum源 ]# systemctl stop firewalld #关闭防火墙 ]# setenforce 0 #关闭selinux 1.安装相关软件 ]# yum -y install dhcp httpd tftp rsync cobbler cobbler-web pykickstart xinetd dhcp //DHCP服务,分配ip httpd //Apache web服务,提供yum源 tftp-server //TFTP服务,传送配置文件 rsync //用于同步cobbler配置 cobbler //cobbler程序包 pykickstart //cobbler检查kickstart语法错误 xined //提供tftp的daemon运行 cobbler