linux_sed操作

sed处理流程

sed ‘p‘ passwd打印两行一模一样的(因为默认已经输出到屏幕上一次,在p一下就两次了),sed -n ‘p‘ passwd就可以正常显示一行,-n忽略默认输出,把默认的输出忽略了

nl passwd就会把行号显示出来

定位一行的方式:

1、行号

nl passwd | sed -n ‘22p‘就会把第22行的行号和内容输出来,nl -b a passwd,nl -b a的意思把空白行的行号也显示出来

2、正则表达式

sed -n ‘/mysql/p‘ passwd,利用正则表达式把mysql这行打印出来

定位多行的方式:

1、行号

nl passwd | sed -n ‘1,5p‘显示1-5行,多行显示

2、正则表达式

可以用正则表达式nl passwd | sed -n ‘/mysql/,/ssj/p‘定位多行,也可以用行号和正则同时来定位(nl passwd | sed -n ‘1,/adm/p‘)

不选择这一行或几行:

nl passwd | sed -n ‘10!p‘ 不要第10行

nl passwd |
sed -n ‘6,10!p‘ 不要第6-10行

间隔几行:

nl passwd |
sed -n ‘6~2p‘ 从第6行开始,步长是2,中间是~线,打印出第6,8,10......

基本操作命令:

-a:新增行 nl
passwd | sed  ‘12a=====‘,在第12行后面插入5个=,nl passwd | sed
 ‘1,5a=====‘,在1-5行后面插入5个=

i:插入行 nl
passwd | sed  ‘12i=====‘,在第12行前面插入5个=,nl passwd | sed
 ‘1,5i=====‘,在1-5行前面插入5个=

-c:替代行 nl
passwd | sed  ‘12c=====‘,把第12行换成5个=,nl passwd | sed
 ‘7,12c=====‘,把7-12行变成1行,5个=

-d:删除行 nl
passwd | sed  ‘12d‘,删除第12行,nl passwd | sed  ‘7,12d‘,把7-12行都删除

修改配置文件,在profile中添加环境变量:

sed -i ‘$a  export TOMCAT_HOME=XXXX\n    export PATH=$PATH:$TOMCAT_HOME‘
profile      $代表最后一行,a是最后一行后面新增,\代表输入空格,\n换行,-i是修改文件内容,直接在profile里面就追加成功了

删除空行:

sed ‘/^$/d‘
AAA.txt  ^代表行的开始,$代表行的结束,^$代表空白行

服务器日志处理,服务器log中打印error信息:

sed -n
‘/error/p‘ AAA.txt

替换操作:s

分隔符: /

全局替换:
g  sed ‘s/:/*/g‘ passwd 把passwd文件里的所有:都换成*,如果没有写g,只把第一个:替换成*

多个sed命令用;隔开 nl passwd | sed ‘{10,20d;s/:/*/g}‘ 删除掉10-20行且将:全部换成*

nl passwd |
sed -n ‘{n;p;}‘ 大括号里的n是跳过这一行直接处理下一行打印,打印就是2,4,6,8......  nl passwd
| sed -n ‘{n;n;p;}‘ 打印3,6,9......,也可以用步长的方式打印3,6,9行 nl passwd | sed -n ‘{3~3p}‘

&:替换固定的字符串,配合替换操作使用,将passwd中用户名后添加空格 sed ‘s/[a-z_-]\+/&
/‘ passwd,先把用户名筛选出来,用户名这么表示[a-z_-],正则a-z随机取一个,passwd里多个用户名,使用+,将+转义用\+,&就是代表[a-z_-],匹配用户名

将用户名的首字母转换为大写 \u \l ,ls | sed ‘s/.*/\u&/‘,对一串字符转大写或小写 \U \L, ls | sed ‘s/.*/\U&/‘,&就是代表.*,.代表除了换行符以外的所有字符

() \(\),括号要转义,替换某部分字符串,cat test.txt | sed ‘s/w1\(w2\)\(w3\)/\1\2/‘ ,\1代表第一个正则表达式括弧里面的字符,\2第二个正则表达式括弧里面的字符

获取eth0的IP,有两种方式,一是ifconfig | sed -n ‘/inet .*Bca/p‘
| sed ‘s/ine.*r:\([0-9\.]\+\).\+Bcast.*$/\1/‘,[0-9\.]代表ip的正则表达式,.要转义用\.,一个ip以上\+.\+中间有一个以上任意字符,.*$,Bcast后面任意字符

二是ifconfig
| sed -n ‘/inet .*Bca/p‘ | sed
‘s/ine.*r:\([0-9\.]\+\).*Bcast:\([0-9\.]\+\).*Mask:\([0-9\.]\+\)/\1/‘,ifconfig | sed -n ‘/inet .*Bca/p‘ | sed
‘s/ine.*r:\([0-9\.]\+\).*Bcast:\([0-9\.]\+\).*Mask:\([0-9\.]\+\)/\1,\2,\3/‘可以把三个ip都取出来

获取passwd中的用户名,uid,gid, sed
‘s/\(^[a-z_-]\+\):x:\([0-9]\+\):\([0-9]\+\):.*$/\1,\2,\3/‘ passwd

r:读取指定文件插入到匹配行,sed ‘1r a.txt‘ b.txt,读取a.txt文件的内容,插入到b.txt文件的第一行,读文件不会改变文件内容,a.txt和b.txt文件内容不会改变

w:复制匹配行拷贝指定文件里,sed ‘1w a.txt‘ b.txt,拷贝b.txt文件的第一行,写到a.txt文件里,覆盖写,a.txt变成了aaa,写操作会改变目标文件

q:退出sed,使用q可以提前退出sed  nl passwd | sed ‘5q‘,打印到第5行就退出sed了

-e:可以执行多次sed命令,nl passwd | sed -e ‘10,20d‘ -e
‘s/:/*/g‘,删除10-20行并且将:全部替换成*

-i:可以修改文件的内容

修改当前目录下所有文件中包含aaa的文件,将aaa改成AAA

grep aaa -rl .这个命令就可以将当前目录下所有文件中包含aaa的文件给查找出来,通过 sed -i "s/aaa/AAA/g" `grep aaa -rl .` 即可实现

原文地址:https://www.cnblogs.com/laosun0204/p/10541405.html

时间: 2024-08-30 17:00:53

linux_sed操作的相关文章

如何用一个app操作另外一个app.比如微信群控那样的

如何实现一个app.控制另外的app,比如市面上群控微信的,是用测试工具的原理?还是什么模拟点击的原理? 如何用一个app操作另外一个app.比如微信群控那样的 >> android 这个答案描述的挺清楚的:http://www.goodpm.net/postreply/android/1010000007186891/如何用一个app操作另外一个app比如微信群控那样的.html

ELK 学习笔记之 elasticsearch Mget操作

Mget操作: 查询多个文档: curl -XGET 'http://192.168.1.151:9200/_mget' -d '{"docs": [{"_index": "library","_type": "books", "_id": "1"}, {"_index": "library","_type"

条件、循环、函数定义、字符串操作练习

注意标准库的两种导入与使用方式,建议大家采用<库名>.<函数名>的方式. 对前面的代码进行优化,用for,while,if,def实现: 用循环画五角星 1 import turtle 2 3 turtle.fillcolor("red") 4 turtle.begin_fill() 5 for i in range(5): 6 turtle.forward(100) 7 turtle.right(144) 8 turtle.end_fill() 用循环画同心圆

Python 文件操作

操作文件时,一般需要经历如下步骤: 打开文件 操作文件 一.打开文件 文件句柄 = open('文件路径', '模式') 打开文件时,需要指定文件路径和以何等方式打开文件,打开后,即可获取该文件句柄,日后通过此文件句柄对该文件操作. 打开文件的模式有: r,只读模式(默认). w,只写模式.[不可读:不存在则创建:存在则删除内容:] a,追加模式.[可读: 不存在则创建:存在则只追加内容:] "+" 表示可以同时读写某个文件 r+,可读写文件.[可读:可写:可追加] w+,写读 a+,

Python操作数据库(mysql redis)

一.python操作mysql数据库: 数据库信息:(例如211.149.218.16   szz  123456) 操作mysql用pymysql模块 #操作其他数据库,就安装相应的模块 import  pymysql ip='211.149.218.16' port=3306 passwd='123456' user='root' db='szz' conn=pymysql.connect(host=ip,user=user,port=port,passwd=passwd,db=db,cha

数据库权限分配操作

1.远程登录mysqlmysql -h ip -u root -p 密码2.创建用户格式:grant 权限 on 数据库.* to 用户名@登录主机 identified by "密码";例1:增加一个test1用户,密码为123456,可以在任何主机上登录,并对所有数据库有查询,增加,修改和删除的功能.需要在mysql的root用户下进行mysql>grant select,insert,update,delete on *.* to [email protected]&quo

Django(三) ORM 数据库操作

比较有用 转自 http://blog.csdn.net/fgf00/article/details/53678205 一.DjangoORM 创建基本类型及生成数据库表结构 1.简介 2.创建数据库 表结构 二.Django ORM基本增删改查 1.表数据增删改查 2.表结构修改 三.Django ORM 字段类型 1.字段类型介绍 2.字段参数介绍 3.Django ORM 外键操作 一.DjangoORM 创建基本类型及生成数据库表结构 1.简介 ORM:关系对象映射.定义一个类自动生成数

python操作mysql ------- SqlAchemy正传

本篇对于Python操作MySQL主要使用两种方式: 原生模块 pymsql ORM框架 SQLAchemy pymsql pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同. 下载安装 pip3 install pymysql 使用操作 1.执行SQL #!/usr/bin/env python # -*- coding:utf-8 -*- import pymysql # 创建连接 conn = pymysql.connect(host='127.0.0.1

SQLServer数据库自增长标识列的更新修改操作

SQLServer数据库自增长标识列的更新修改操作方法在日常的sql server开发中,经常会用到Identity类型的标识列作为一个表结构的自增长编号.比如文章编号.记录序号等等.自增长的标识列的引用很大程度上方便了数据库程序的开发,但是有时这个固执的字段类型也会带来一些麻烦. 一.修改标识列字段的值:(在执行insert时,将ID手动的设置成想要的值)有时,为了实现某个功能,需要修改类型为Identity自增长类型的字段的值,但由于标识的类型所限,这种操作默认是不允许的.比如,目前数据库有