今天总结一个正则的东西匹配和替换的删除奇数行和偶数行来理解模式空间以及模式空间是如何保存、标记数据的

删除偶数行:

%s/\(^.*$\)\n^.*$/\1/g

删除奇数行:

%s/^.*$\n\(^.*$\)/\1/g

其实这是用了一种替换命令即/ab/a/g

g/.*$/+1d 删除偶数行

g/.*$/d|m 这个也可以涉及到了替换、模式空间标记,

删除偶数行的方法如下:

?

1

:g/^/+1 d

上面用到了:gbobal命令,gbobal命令格式如下:

?

1

:[range]global/{pattern}/{command}

global命令实际上是分成两步执行:首先扫描[range]指定范围内的所有行,给匹配{pattern}的行打上标记;然后依次对打有标记的行执行{command}命令,如果被标记的行在对之前匹配行的命令操作中被删除、移动或合并,则其标记自动消失,而不对该行执行{command}命令。{command}可以是一个ex命令,也可以是用|分隔的多个ex命令,这样我们就可以对被标记行,或从标记行寻址到的行进行多种不同的操作。

上面删除偶数行的命令,先匹配所有行,然后隔行删除(其中+1用以定位于当前行的下一行)。为什么是隔行呢?因为在对第一行执行+1 d命令时删除的是第二行,而第二行虽然也被标记了,但已不存在了,因此不会执行删除第三行的命令。

删除几数行的命令如下:

?

1

:g/^/d|m

其中m的作用是移出偶数行的标记,防止偶数行也被删除。

另外删除几数行偶数行,也可以用normal命令,分别为(第一个命令为几数行):

?

1

2

:%norm jkdd

:%norm jdd

%s/\(^.*$\)\n^.*$/\1/g      vi 替换命令谁能帮忙讲一下

全局替换所有去掉特殊符号

\( \)   是所有内容

^  改行开头

^. 开行开头的第一个字符

* 后面跟的字符

$ 换行

\n 换行

\1  这个不知道啥意思...

\1 是不 是代表第一个保存的字符串啊

不会....

这个正则的功能是隔行删除...

咋实现的  我不知道

悠悠巷口 10:19:33

\n^.*$/ 这个看不懂

每行开头

有点得字符

至结尾

那它还用\n什么作用

.不是代表有点的字符...

点是通配符..

%s/\(^.*$\)\n^.*$/\1/g     vi 替换命令谁能帮忙讲一下

%s/  语法

\(^.*$\)\n^.*$

/ 语法

\1

/g  语法

解释:

正则表达式预备知识

注意到,对于正则表达式有

匹配 任意字符 ( 除换行符 ) .

匹配重复零次或多次前一字符 *

匹配集合中任意字符 [...]

匹配不属集合 中 任意字符 [^...]

匹配 行首、行尾 ^, $

匹配 词首、词尾 \

正则表达式 分组 \(...\)

第 n 个分组内容 \n

于是

\1 表示第一个正则表达式分组即\(^.*$\) 我们暂将第一个正则表达式分组\(^.*$\)其记为:A

类推,\2就应该表示第二个正则表达式分组,即 \n^.*$  实际上 也应该写在括号内比较好:\(\n^.*$\) ,我们也暂将第二个正则表达式分组\n^.*$

记为:B

于是

%s/\(^.*$\)\n^.*$/\1/g

就可以写为:

%s/AB/A/g

即将所有AB都替换成A。

现在我们来分别分析A和B的作用。

A=\(^.*$\)

抽取出来实际上是\(...\),表示正则表达式 分组,再分析括号内的^.*$,^代表行首,

.匹配 任意字符 ( 除换行符 ) , *匹配重复零次或多次前一字符 , $代表匹配到行尾,综合起来就是:匹配这一行

B=\n^.*$

解释: \n换行,^.*$同上,表示匹配这一行,综合起来就是:下一行(即上行结束后开始的另一行)。

再于是就有:%s/AB/A/g 即将所有AB都替换成B  ,代入A和B各自意思得到:

将两行(如行1和行2 )内容替换为第一行内容(即行1的内容),加上/g,就是对全文进行前述替换,也就是隔行删除,如果是从文件第一行开始进行的操作,就意味着是删除所有偶数行、保留所有奇数行操作。

删除偶数行:

%s/\(^.*$\)\n^.*$/\1/g

删除奇数行:

%s/^.*$\n\(^.*$\)/\1/g

补充另一例子: sed 's/\(.*\)\(.\)$/\2/'

\2就应该表示第二个正则表达式分组

同上,也将A=/\(.*\),B=\(.\)$,表达式变为's/AB/B',将AB都替换成B。

分析A、B作用。

A=/\(.*\)     抽取出来实际上是\(...\),表示正则表达式

分组,再分析括号内的 .*,表示匹配任意零个或多个字符 ( 除换行符 )

B=\(.\)$      括号内的 . ,表示匹配 任意字符 ( 除换行符

) ,括号外的$表示匹配到行尾,即表示行尾的最后一个字符;那上述的A /\(.*\)  就表示该行最后一个字符前的所有字符。

于是 sed 's/\(.*\)\(.\)$/\2/'

作用就是:删除该行除最后一个字符外的所有字符,保留最后一个字符,也即取得该行最后一个字符。

把语法的地方去掉  看具体内容

\(  ^. * $  \)  \n ^.*$

匹配整个文本\(\)

开头位置字符匹配至结尾 匹配内容为第一个字符0个或者N个 制止改行结束   之后勋章换行符  再之后匹配开头的第一个字符到结束 删除一行.

python列表中删除奇数行_shell 删除奇数偶数行相关推荐

  1. python从后面删除重复项_如何从Python列表中删除重复项

    如何从Python列表中删除重复项 了解如何从Python中的List中删除重复项技巧. 实例 从列表中删除任何重复项: mylist = ["a", "b", ...

  2. python列表(list)+索引切片+修改+插入+删除+range函数生成整数列表对象

    python列表(list)+索引切片+修改+插入+删除+range函数生成整数列表对象 列表(list)是什么? 列表是Python中内置有序.可变序列,列表的所有元素放在一对中括号"[] ...

  3. python课堂实例_享学课堂带你了解并读懂Python列表中的6种操作实例

    原标题:享学课堂带你了解并读懂Python列表中的6种操作实例 今天为大家来介绍一下很多人在享学课堂上学习Python时,经常会用到列表,列表(list)就是动态数组,相当于C++标准库的Vector ...

  4. chatgpt赋能python:如何去除Python列表中的中括号

    如何去除Python列表中的中括号 在Python中,列表是一个非常重要的数据类型.它可以存储多个不同类型的元素,并且可以动态地增加或删除元素.但是,有时候我们需要将列表中的元素取出来,而不想要中括号 ...

  5. 详解python列表中冒号的用法

    详解python列表中冒号的用法 切片 赋值 a=b型 a=b[:]型 a[:]=b[:]型 写这个专题是因为做Leetcode第88题被两个写法坑了一下 nums1 = sorted(nums1[: ...

  6. python列表中的冒号_python 列表中[ ]中冒号‘:’的作用

    中括号[ ]:用于定义列表或引用列表.数组.字符串及元组中元素位置 list1 = ['physics', 'chemistry', 1997, 2000] list2 = [1, 2, 3, 4, ...

  7. Python——列表中存放字典遇到的问题

    Python--列表中存放字典遇到的问题 使用列表.字典之间的相互嵌套可以很容易的实现json数据格式,但是昨天在往列表中装入字典时遇到了问题: 直接使用append方法将字典添加到列表中,如果需要更 ...

  8. python列表中随机选择_如何在Python中从列表中随机选择一个项目?

    python列表中随机选择 Python random module provides an inbuilt method choice() has an ability to select a ra ...

  9. python保存列表到json_将json数据保存到python列表中时出现问题

    我试图同时从json数据中获取两个属性,并将它们作为项目添加到我的python列表中.但是,当尝试添加这两个时:['emailTypeDesc']['createdDate']它将引发错误.有人可以帮 ...

  10. python 获取唯一值_从Python列表中获取唯一值

    python 获取唯一值 In this article, we will be understanding 3 ways to get unique values from a Python lis ...

最新文章

  1. 产品经验谈:一文讲清楚商业模式梳理怎么做?
  2. 如何利用开源项目,帮助企业免费搭建小程序官网
  3. php内嵌网页加载js,javascript 窗口加载蒙板 内嵌网页内容_javascript技巧
  4. 网盘大战-各网盘使用测试
  5. Chrome 52的变化
  6. Python接口自动化实战(第二阶段)- unittest框架
  7. 「译」创建一个Hexo主题-Part2:其他页面
  8. VS中安装.nupkg文件
  9. Node2vec原理剖析,代码实现
  10. CodeBlocks下载与安装
  11. 做好自媒体需要具备的几个心态?!
  12. windows安装vim_如何在Windows中下载,安装和使用Vim
  13. c语言%u的作用,C语言中%p,%u,%lu都有什么用处
  14. PPT技能速成班学习笔记
  15. 报错集-------docker中删除镜像时报错
  16. java hotspot 默认垃圾回收器_怎么查看服务器默认的垃圾的收集器是哪个?生产环境上如何配置垃圾回收收集器?谈谈你对垃圾收集器的理解?...
  17. 【刷题-剑指 Offer】 54. 二叉搜索树的第k大节点
  18. AltiumDesigner PCB设计规则
  19. CSDN积分怎么获取
  20. 有关利用PL2303HX USB到RS232 TTL转换器适配器模块把STC89C52RC等STC系列单片机与计算机连接、向Keil添加STC库及hex文件考录方法小结

热门文章

  1. SQL Server简介
  2. Elasticsearch索引别名alias操作
  3. linux卸载字体库,在Ubuntu中删除不必要的字体并安装MS核心字体 | MOS86
  4. 利用CC2530单片机的蜂鸣器播放音乐的代码
  5. 6. 批量处理分析数据
  6. 简单易懂的理解java开发中的 DO、BO、DTO、VO、AO都是什么✌
  7. 双目视觉焦距_双目视觉的摄像头选择问题
  8. 一个Qt调用百度翻译API进行文本翻译的程序记录,辅助ts文件进行翻译。
  9. 微信小程序样式 WXSS
  10. bind错误:server can't find www.linuxprobe.com: SERVF