12、sed、awk、数组 学习笔记

sed命令:

sed 选项 "地址定界编辑命令" FILE ...

选项:

-n 静默模式,不输出模式空间中的内容

-r 扩展的正则表达式

-f /path/to/script_file 指定sed脚本文件

-e ‘script‘ -e ‘script‘ 指定多个编辑指令

-i 直接编辑原文件

地址定界:

startline,endline startline到endline之间的所有行

/pat1/,/pat2/ 第一次匹配pat1到第一次匹配pat2之间的所有行

/pattern/ 所有包含pattern的行

编辑命令:

d 删除

p 打印

i \text 在匹配的行之前插入

a \text 在匹配的行之后插入

r /path/to/somefile 在指定位置把另外一个文件的内容插入进来

w /path/to/somefile 将符合条件的所有行保存至指定的文件中

= 显示符合条件的行的行号

s/// 查找条件可以使用模式,但要替换的内容不行

sed ‘地址定界[email protected]查找条件@替换文本@‘

修饰符:

g: global,全局替换

i: ignore-case,不区分字符大小写

He like his liker.

He like his lover.

She love her liker.

She love her lover.

1、删除以上内容当中包含单词“l..e”前后一致的行;

sed ‘/\(1..e\).*\1r/d‘ sed.txt

2、将文件中“l..e”前后一致的行中,最后一个l..e词首的l换成大写L;

sed ‘[email protected]\(\(l\(..e\)\).*\)\[email protected]\1L\[email protected]‘ sed.txt

sed -n ‘/\(l..e\).*\1r/p‘ sed.txt | sed ‘s/l\(...r\)/L\1/g‘

练习:

1、替换/etc/inittab文件中“id:3:initdefault:”一行中的数字为5;

# sed ‘[email protected]\(id:\)[0-9]\(:initdefault\)@\15\[email protected]‘ /etc/inittab

2、删除/etc/init.d/funcions文件中的空白行;

# sed ‘/^$/d‘ /etc/init.d/functions

3、删除/etc/inittab文件中位于行首的#;

# sed ‘[email protected]^#@@g‘ /etc/inittab

4、删除/etc/rc.d/rc.sysinit文件中以#后跟至少一个空白字符开头的行的行首的#和空白字符;

# sed ‘[email protected]^#[[:space:]]\{1,\}@@g‘ /etc/rc.d/rc.sysinit

5、删除/boot/grub/grub.conf文件中行首的空白字符;

# sed ‘[email protected]^[[:space:]]\{1,\}@@‘ /boot/grub/grub.conf

6、取出一个文件路径的目录名称,如/etc/sysconfig/network,其目录为/etc/sysconfig,功能类似dirname命令;

# echo /etc/sysconfig/network-scripts/ifcfg-eth0/ | sed ‘[email protected][^/]\{1,\}/\[email protected]@‘

awk命令:

用法格式:awk [options] ‘/pattern/{action}‘ FILE ...

options:

-F                  指定分隔符,默认为空格

pattern:

/pat1/,/pat2/                  第一次匹配pat1到第一次匹配pat2之间的所有行

/pattern/                  所有包含pattern的行

expression                  表达式

>, >=, <, <=, ==, !=, ~

BEGIN  执行前的做准备工作

END  执行后的收尾工作

action:

print $1  默认为打印

awk的内置变量:

NF:字段数

awk -F" " ‘{print $NF}‘ /etc/fstab  输出最后一个字段

FS: 读入行时使用的字段分隔符,默认为空白

OFS: 输出时使用字段分隔符,默认为空白

练习:

1、显示GID小于500的组;

# awk -F : ‘$3<500{print $1}‘ /etc/group

# awk -F : ‘BEGIN{print "group name\n============="}$3<500{print $1}END{print "=============\ngroup name"}‘ /etc/group

2、显示默认shell为nologin的用户;

# awk -F : ‘$7~/nologin$/{print $1}‘ /etc/passwd

3、显示eth0网卡文件的配置信息,注意,只显示等号后面的值;

# awk -F = ‘{print $2}‘ /etc/sysconfig/network-scripts/ifcfg-eth0

4、显示/etc/sysctl.conf文件中定义的内核参数;只显示名称;

# awk -F = ‘!/^#|^$/{print $1}‘ /etc/sysctl.conf

# awk -F = ‘/^[^#]/{print $1}‘ /etc/sysctl.conf

5、显示eth0网卡的ip地址;通过ifconfig的命令结果进行过滤

# ifconfig eth0 | awk ‘/inet addr/{print $2}‘ | awk -F: ‘{print $2}‘

bash编程:数组初步

声明数组:declare -a arrayName

初始化或赋值:各元素间使用空白字符分隔

第一种:arrayName=(‘a‘ ‘b‘ ‘c‘)

第二种:arrayName=([index]=‘a‘ [index]=‘b‘)

第三种:arrayName[0]=‘a‘; arrayName[1]=‘b‘

获取数组中有效元素的个数:${#arrayName[@]}或${#arrayName[*]}

获取某一元素中字符串的长度:${#arryName[index]} (index=0,1,2...)

bash伪随机数生成器:$RANDOM

#!/bin/bash

declare -a arrayName

arrayName=(welcome to china [8]=good)

for i in `seq 0 7`;do

echo "arrarName[$i]:${arrayName[$i]},${#arrayName[$i]}"

echo $[$RANDOM%8]

done

echo "Number:${#arrayName[@]}"

时间: 2024-11-03 20:54:10

12、sed、awk、数组 学习笔记的相关文章

LVS的持久连接和awk/sed/grep的学习笔记

一.LVS持久连接的模式 1.PPC(persistent port connection) ipvsadm -A|E 192.168.10.1:80 -p 600 定义VIP为192.168.10.1director的80端口为持久连接,也就是只把web服务加入集群服务,可以通过改变端口实现不同服务的持久连接且把不同服务加入集群服务 2.PCC(persistent client connection) ipvsadm -A|E 192.168.10.1:0 -p 600 定义VIP为192.

蓝鸥Unity开发基础—— 一维数组学习笔记

蓝鸥Unity开发基础-- 一维数组学习笔记 一.数组 之前我们学过很多数据类型,今天我们来学习数字,数字也是一种数据类型,那么,具体的数组是如何定义的? 数组:相同数据类型的成员组成的一组数据 Int类型数组:4  7  12  3  5--数组元素 Float数据类型数字:11.5 4.62 7.1 2.21 9.3--数组元素 数组中每一个元素都会分配一个数组下标,数组下标是从0开始的,有序排列,如:0 1 2 3 4 二.声明并初始化数组: 数组也是数据类型,所以也可以声明变量.使用ne

后缀数组学习笔记【详解|图】

后缀数组学习笔记[详解] 老天,一个后缀数组不知道看了多少天,最后终于还是看懂了啊! 最关键的就是一会儿下标表示排名,一会用数值表示排名绕死人了. 我不知道手跑了多少次才明白过来.其实我也建议初学者手跑几遍,但是一定要注意数组的意义,否则就是无用功. 数组含义: s[ ]:输入的字符串,预处理的时候会在末尾加上一个0 sa[ ]:它的下标就是后缀排名 x[ ] = t[ ]:用来保存第一关键字排名,注意!它的数值是排名.初始时恰好是字符串的ASCII码.字典序嘛! y[ ] = t2[ ]:它的

蓝鸥Unity开发基础—— 二维数组学习笔记

蓝鸥Unity开发基础-- 二维数组学习笔记 一.二维数组 有两个下标的数组叫做二维数组 类似[,]数组名=new类型[常量表达式1,常量表达式2] int[,] numbers= new int[2,3]; [0,0] [0,1] [0,2] [1,0] [1,1] [1,2] 举例说明 using System; namespace Lesson16{    class MainClass    {        public static void Main (string[] args)

linux 下的 正则表达式(awk,sed,awk)学习

一.正则表达式: 正则表达式(或称Regular Expression,简称RE)就是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式. 该模式描述在查找文字主体时待匹配的一个或多个字符串. 正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配.简单的说,正则表示式就是处理字符串的方法,它是以行为单位来进行字符串的处理行为, 正则表示式通过一些特殊符号的辅助,可以让使用者轻易的达到搜寻/删除/取代某特定字符串的处理程序.vim.grep.find.awk.se

JS数组学习笔记

最近在备课数组,发现很多ES5的方法平时很少用到.细节比较多,自己做了大量例子和整理,希望对大家了解JavaScript中的Array有所帮助. 概念 数组是值的有序集合.每个值叫做元素,每个元素在数组中都有数字位置编号,也就是索引.JS中的数组是弱类型的,数组中可以含有不同类型的元素.数组元素甚至可以是对象或其它数组. JS引擎一般会优化数组,按索引访问数组常常比访问一般对象属性明显迅速. 数组长度范围 from 0 to 4,294,967,295(2^23 - 1) 数组创建 var BA

勾股数组 学习笔记

颓废了一个暑假,想做点CF提高一下智商,然后就被这题卡住了.    http://codeforces.com/contest/707/problem/C 题目大意是给出各条边都是正整数的直角三角形的一条边长,求另外两条边可能的一种方案. 除了爆搜脑子一片空白,然后就很没志气的看了题解,提到了勾股数组,于是学习了一下.网络上的资料感觉证明不是详细,所以自己来写个总结. 1.首先如果 $a^2+b^2=c^2$ , 则$(ka)^2+(kb)^2=(kc)^2$ , 因此我们先只考虑$gcd(a,

《C#高级编程》【第六章】数组 -- 学习笔记

       为了解决大量的同类型元素,于是数组就孕育而生了.数组是具有一定顺序关系的若干对象的集合体,一维数组可以看作是定长的线性表.反之,n为的数组可以看作线性表的推广.从存储结构上来看,数组是一段连续的存储空间.现在我们看看在C#中的数组: 1.普通数组 在C#中普通数组又可以分为一维数组.多维数组和锯齿数组. <1>一维数组 我们现在先看看一维数组的声明语法: 类型[] 变量名; 知道怎么声明了,现在我们继续看看数组的初始化吧,在C#中有4种初始化的方式: //n为数组长度,an为

《C++ Primer Plus》12.7 队列模拟 学习笔记

Heather银行打算在Food Heap超市开设一个自动柜员机(ATM).Food Heap超市的管理者担心排队使用ATM的人流会干扰超市的交通,希望限制排队等待的人数.Heather银行希望对顾客排队等待的事件进行估测.要编写一个程序来模拟这种情况,让超市的管理者可以了解ATM可能招骋的影响.对于这种问题,最自然的方法是使用顾客对列.队列是一种抽象的数据类型(Abstract Data Type,ADT),可以存储有序的项目序列.新项目被添加在队尾,并可以删除队首的项目.队列有点像栈,单栈在