php读取文本文档中的奇数行,如何将文本内容奇数行与偶数行调换?

如题目,是本人很早面试时被面试官问到的,不是笔试题,当时我就懵了,正则不是很牛逼。我回复说我想一下,之后回复说用sed,对方又问如果文本内容有1万行,你怎么替换?然后我就呵呵了,结果你懂的。回来后请教了论坛的高手解答出来了。大家可以参考学习一下,工作中可能会遇到同样的问题

举例说明:[root@yonglinux ~]# grep -En '[0-9]|[a-z]' 1.txt

1:239fb

2:5e0eb

3:a8b5f

4:bb42c

5:9e242

6:2336b

7:5ecf1

8:4f2d5

9:8fd6b

10:ce886

第一种方法:sed[root@yonglinux ~]# sed -r 'N;s/(.*)\n(.*)/\2\n\1/' 1.txt

5e0eb

239fb

bb42c

a8b5f

2336b

9e242

4f2d5

5ecf1

ce886

8fd6b

解释说明:

sed以行为单位处理文本,其模式缓冲区内只保留一行内容待处理。

N 命令,将下一行读入并附加到当前行后面,以 \n (换行符)分隔,一起存在模式缓冲区内。

第二种方法:awk[root@yonglinux ~]# awk 'NR%2{a=$0;next}{print $0"\n"a}' 1.txt

5e0eb

239fb

bb42c

a8b5f

2336b

9e242

4f2d5

5ecf1

ce886

8fd6b

写回文件的话sed方便,效率的话awk稍微快一点,万行约10毫秒。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值