如题目,是本人很早面试时被面试官问到的,不是笔试题,当时我就懵了,正则不是很牛逼。我回复说我想一下,之后回复说用sed,对方又问如果文本内容有1万行,你怎么替换?然后我就呵呵了,结果你懂的。回来后请教了论坛的高手解答出来了。大家可以参考学习一下,工作中可能会遇到同样的问题
举例说明:
1
2
3
4
5
6
7
8
9
10
11
<code>[root@yonglinux ~]</code><code># grep -En '[0-9]|[a-z]' 1.txt</code>
<code>1:239fb</code>
<code>2:5e0eb</code>
<code>3:a8b5f</code>
<code>4:bb42c</code>
<code>5:9e242</code>
<code>6:2336b</code>
<code>7:5ecf1</code>
<code>8:4f2d5</code>
<code>9:8fd6b</code>
<code>10:ce886</code>
第一种方法:sed
<code>[root@yonglinux ~]</code><code># sed -r 'N;s/(.*)\n(.*)/\2\n\1/' 1.txt</code>
<code>5e0eb</code>
<code>239fb</code>
<code>bb42c</code>
<code>a8b5f</code>
<code>2336b</code>
<code>9e242</code>
<code>4f2d5</code>
<code>5ecf1</code>
<code>ce886</code>
<code>8fd6b</code>
解释说明:
sed以行为单位处理文本,其模式缓冲区内只保留一行内容待处理。
N 命令,将下一行读入并附加到当前行后面,以 \n (换行符)分隔,一起存在模式缓冲区内。
第二种方法:awk
<code>[root@yonglinux ~]</code><code># awk 'NR%2{a=$0;next}{print $0"\n"a}' 1.txt</code>
写回文件的话sed方便,效率的话awk稍微快一点,万行约10毫秒。
本文转自 模范生 51CTO博客,原文链接:http://blog.51cto.com/mofansheng/1696631,如需转载请自行联系原作者