Linux Sed命令具体解释+怎样替换换行符"\n"(非常多面试问道)
Sed
Sed是一个强大的文本处理工具
能够採用正则匹配。对文本进行插入删除改动等操作
Sed处理的时候,一次处理一行,每一次把当前处理的存放在暂时缓冲区。处理完后输出缓冲区内容到屏幕,然后把下一行读入缓冲区,如此反复,直到结尾。
1、命令格式和參数
sed [-nefr] [动作] 文件
參数:
-n 安静模式。在sed处理的时候。全部来自STDIN的数据都会被输出到终端。加上-n会仅仅输出处理的哪行
-e 直接在命令列上进行sed动作编辑
-f 直接将sed的动作写在文件内
-r sed动作支持延伸的正则表达(默认仅仅是基础正则)
-i 直接改动文件内容(慎用,尤其是用系统文件做练习的时候)
动作:
a append:添加。在当前行的下一行添加
c :代替,代替n1到n2之间的行
d delete:删除
i 插入,眼下行的上一行插入
p 打印。经常与-n使用
s 代替,s/old/new/g
2、基础使用方法具体解释
(1)第一行之后加入一行
[root@localhost ~]# nl file.txt | sed "1a add text"
1 wtmp begins Mon Feb 24 14:26:08 2014
add text
2 192.168.0.1
3 162.12.0.123
4 this is the last line
(2)第一行之前加入一行
[root@localhost ~]# nl file.txt | sed "1i add text"
add text
1 wtmp begins Mon Feb 24 14:26:08 2014
2 192.168.0.1
3 162.12.0.123
4 this is the last line
(3)删除第2,3行
[root@localhost ~]# nl file.txt | sed "2,3d"
1 wtmp begins Mon Feb 24 14:26:08 2014
4 this is the last line
(4)打印第2,3行
[root@localhost ~]# sed -n "2,3p" file.txt
192.168.0.1
162.12.0.123
这里要提到的是,尽量使用-n。不然会出现这种结果
[root@localhost ~]# sed "2,3p" file.txt
wtmp begins Mon Feb 24 14:26:08 2014
192.168.0.1
192.168.0.1
162.12.0.123
162.12.0.123
this is the last line
(5)把168换成169
先看源文件
[root@localhost ~]# cat file.txt
wtmp begins Mon Feb 24 14:26:08 2014
192.168.0.1
162.12.0.123
this is the last line
处理后
[root@localhost ~]# sed "s/168/169/g" file.txt
wtmp begins Mon Feb 24 14:26:08 2014
192.169.0.1
162.12.0.123
this is the last line
(6)插入多行
[root@localhost ~]# nl file.txt | sed "2afirst\nsecond" file.txt
wtmp begins Mon Feb 24 14:26:08 2014
192.168.0.1
first
second
162.12.0.123
this is the last line
(7)匹配数据,然后进行操作
仅仅须要在上述的基础上加上正则匹配
sed "/匹配的模式/处理的方式" file.txt
sed "/^root/d" file.txt 对開始有root的删除
比如
匹配begin,并删除改行
[root@localhost ~]# nl file.txt | sed "/begin/d"
2 192.168.0.1
3 162.12.0.123
4 this is the last line
匹配123,而且把含有123的行162都替换成172
[root@localhost ~]# nl file.txt | sed "/123/{s/162/172/g;q}"
1 wtmp begins Mon Feb 24 14:26:08 2014
2 192.168.0.1
3 172.12.0.123
4 this is the last line
这里大括号{}里能够运行多个命令,用;隔开就可以,q是退出
(8)连续编辑 -e
删除第二行,而且匹配把last替换成new
<pre name="code" class="plain">[root@localhost ~]# nl file.txt | sed -e "2d" -e "s/last/new/"
1 wtmp begins Mon Feb 24 14:26:08 2014
3 162.12.0.123
4 this is the new line
(9)直接改动文件,切记不要改动系统文件
[root@localhost ~]# sed -i "/begin/{s/24/25/g}" file.txt
[root@localhost ~]# cat file.txt
wtmp begins Mon Feb 25 14:26:08 2014
192.168.0.1
162.12.0.123
this is the last line
三 、一个比較有趣的样例
怎样替换\n也就是把全部的行都归为一行
第一种方式
[root@localhost ~]# sed ':a;N;$!ba;s/\n/ /g' file.txt
wtmp begins Mon Feb 25 14:26:08 2014 192.168.0.1 162.12.0.123 this is the last line
另外一种方式
[root@localhost ~]# tr "\n" " " < file.txt
wtmp begins Mon Feb 25 14:26:08 2014 192.168.0.1 162.12.0.123 this is the last line last linen
Linux Sed命令具体解释+怎样替换换行符"\n"(非常多面试问道)的更多相关文章
- Linux下Shell脚本替换换行符(转)
说明:过滤换行符确实有点吭,不是那么好弄.处理文本时需要将换行符替换为空格,若使用sed命令会比较麻烦,而使用tr命令非常方便. 输入文本(country.txt) China America Fra ...
- linux sed命令参数及用法详解
linux sed命令参数及用法详解 http://blog.csdn.net/namecyf/article/details/7336308 1. Sed简介 sed 是一种在线编辑器,它一次处理一 ...
- [转帖]linux sed命令
linux sed命令就是这么简单 https://www.cnblogs.com/wangqiguo/p/6718512.html 用到的最多的就是一个sed -i 's/nn/mm/' 的命令了. ...
- 理解linux sed命令
理解linux sed命令(2010-02-27 18:21:20) 标签:linuxshellsed替换 分类:革命本钱 1. Sed简介sed是一种在线编辑器,它一次处理一行内容.处理时,把当 前 ...
- sed替换换行符“\n”
linux sed命令,如何替换换行符“\n” 在一次sed使用中,执行命令: sed "s/\n//g" file 1 发现,没起到任何效果. 后来,经查sed官方用户手册,才得 ...
- 【转】linux sed命令
转自:linux sed命令就是这么简单 参考:Linux三大剑客之sed:https://blog.csdn.net/solaraceboy/article/details/79272344 阅读目 ...
- Linux ln命令具体解释及使用
Linux ln命令具体解释及使用 ln是linux中一个很重要命令,它的功能是为某一个文件在另外一个位置建立一个不同的链接,这个命令最经常使用的參数是-s,详细使用方法是:ln –s 源文件 目标文 ...
- **PHP中替换换行符
PHP中替换换行符 php 不同系统的换行不同系统之间换行的实现是不一样的linux 与unix中用 \nMAC 用 \rwindow 为了体现与linux不同 则是 \r\n所以在不同平台上 实现方 ...
- 替换换行符:回车换行CR/LF
windows采用回车+换行CR/LF表示下一行,UNIX/Linux使用换行符LF表示下一行,MAC OS系统使用用回车符CR表示下一行. CR使用符号'\r'表示, ASCII码是13: LF使用 ...
随机推荐
- 最近关于css样式重构的一点心得体会
之前的项目一直都是基于bootstrap,elementUI这些已经很成熟的框架进行二次开发,要么就是一些很小的宣传页面,h5页面,或者结构相对简单的移动端.一直都没有机会对css的整体进行一个思考, ...
- 回文串(bzoj 3676)
Description 考虑一个只包含小写拉丁字母的字符串s.我们定义s的一个子串t的“出 现值”为t在s中的出现次数乘以t的长度.请你求出s的所有回文子串中的最 大出现值. Input 输入只有一行 ...
- 【AtCoder Regular Contest 076 F】Exhausted (贪心)
Description 机房里有M台电脑排成一排,第i台电脑的坐标是正整数i. 现在有N个OIer进入了机房,每个OIer需要一台电脑来学tui习ji,同时每个OIer对自己电脑所处的坐标范围有一个要 ...
- [NOIP2013] 提高组 洛谷P1979 华容道
题目描述 [问题描述] 小 B 最近迷上了华容道,可是他总是要花很长的时间才能完成一次.于是,他想到用编程来完成华容道:给定一种局面, 华容道是否根本就无法完成,如果能完成, 最少需要多少时间. 小 ...
- 【CF1043C】Smallest Word(构造)
题意:给定一个由a和b构成的字符串,可以选择翻转或不翻转他的每个前缀,翻转记为1不翻转记为0,求能将字符串排序的字典序最小的操作序列 n<=1e3 思路:考虑极长的一段a [t,w] 翻转t-1 ...
- 【BZOJ4476&JSOI2015】送礼物(二分,RMQ)
ANS明显是有二分性的 二分答案,设二分值为b M(i,j)−m(i,j)j−i+k>b 显然当l<长度<r时,一端是最小值,一端是最大值. 等于l或r的时候因为可能不满足以上性质, ...
- Caps_Locl exchang Esc
vim ~/.Xmodmap 1 remove Lock = Caps_Lock 2 keysym Escape = ...
- pip源配置
1.使用配置文件配置文件[global]trusted-host=mirrors.aliyun.comindex-url=http://mirrors.aliyun.com/pypi/simple/ ...
- hexo添加百度统计
litten的主题yilia 编辑文件 themes/yilia/_config.yml,添加一行配置,可以删除原来的google analytics baidu_tongji: true 新建 th ...
- LeetCode OJ-- Balanced Binary Tree ***
https://oj.leetcode.com/problems/balanced-binary-tree/ 判断一个二叉树,是否为平衡的.如果是平衡的,则它的每个子树的左右子树高度差不大于1. 递归 ...