只对偶数行或者奇数行进行编辑

有这么一个文本,共3万行。

<a href="index.php"><img src="images/01.jpg"></a>
<a href="index.php"><img src="images/02.jpg"></a>
<a href="index.php"><img src="images/03.jpg"></a>
<a href="index.php"><img src="images/04.jpg"></a>
<a href="index.php"><img src="images/05.jpg"></a>
<a href="index.php"><img src="images/06.jpg"></a>
<a href="index.php"><img src="images/07.jpg"></a>
<a href="index.php"><img src="images/08.jpg"></a>
<a href="index.php"><img src="images/09.jpg"></a>
<a href="index.php"><img src="images/10.jpg"></a>

想要改成这个样子:

<a href="index.php"><img src="images/01.jpg"></a>
<a href="article.php"><img src="images/02.jpg"></a>
<a href="index.php"><img src="images/03.jpg"></a>
<a href="article.php"><img src="images/04.jpg"></a>
<a href="index.php"><img src="images/05.jpg"></a>
<a href="article.php"><img src="images/06.jpg"></a>
<a href="index.php"><img src="images/07.jpg"></a>
<a href="article.php"><img src="images/08.jpg"></a>
<a href="index.php"><img src="images/09.jpg"></a>
<a href="article.php"><img src="images/10.jpg"></a>

也就是把偶数行的index替换成article。简而言之就是偶动奇不动,隔行替换一个文本里面的内容。
最先想到的是原始生产力:
➤把文件的奇数行、偶数行分别拆分出来。
➤把拆分出来的偶数行的index替换掉。
➤然后合并刚刚拆分的奇数偶数行。

sed命令隔行操作

文本最初的样子:

拆出偶数行,写入文本2中 sed '1d;n;d' 1 > 2 ;cat 2
sed找出偶数行
拆出奇数行,写入文本3中 sed 'n;d' 1 > 3 ;cat 3
sed找出奇数行
替换偶数行命令 sed -i 's/index/article/' 2

现在两个文件是这样的:

按行合并两个文件 paste -d "\n" 3 2
paste按行合并文本

稍微先进一点的办法:

Notepad++正则替换实现隔行操作

这个方法思路比较清奇,但效率不高,主要是windows操作大文本太卡。
查找目标:<a href="index.php"><img src="([^"]+)"></a>\r\n<a href="index.php">
替换为:<a href="index.php"><img src="$1"></a>\r\n<a href="article.php">
Notepad隔行替换
思路是这样的:
把下图中阴影选中的部分看作是一个整体:
Notepad隔行替换
整体:
Notepad隔行替换
把尾巴上的index改成article。

更先进的方法,当程序员刚看到这个需求的时候,不屑的说,这简单,几行代码就搞定,我现在说的方法只要很短的一行命令就能搞定。

sed实现高效隔行(奇偶行)操作

命令: sed 'n;s/index/article/' 1
sed隔行操作
若是要改变的行是奇数行,就把命令稍微改一下:sed 's/index/article/;n' 1
若文本的总行数不是偶数,命令可能会出问题,怎么办呢??
删掉最后一行,然后用刚才的命令改好后,然后自己手动加上改好的最后一行。
这条命令解释起来比较抽象,要用动态图才能说清楚,但我不会做动图。诸位直接记住命令就行了,反正命令非常短。

原创文章,转载请注明: 转载自笛声

本文链接地址: 只对偶数行或者奇数行进行编辑

10 条评论

  • 西枫里博客 2018年1月22日 回复

    好复杂,一个mod就搞定,偷笑

  • 姜辰 2018年1月22日 回复

    我看到这个第一想法是正则,但是看到你这个,感觉真的大佬!

  • 懿古今 2018年1月24日 回复

    会写代码就是不一样,我还以为是excel表格呢

  • 夏日博客 2018年1月26日 回复

    还是命令好使呀。

  • 小菜哥 2018年2月1日 回复

    会写代码就是不一样,我还以为是excel表格呢。

    • dige 2018年2月1日 回复 作者

      excel表格咋实现?

  • 钟水洲博客 2018年2月5日 回复

    拜个早年

    • dige 2018年2月5日 回复

      谢谢,祝新年快乐,万事顺利。

  • 哦引力 2018年2月5日 回复

    看到数学方面的就头晕

  • 广州网站建设 2018年6月19日 回复

    这个厉害

发表评论

电子邮件地址不会被公开。 必填项已用*标注