linux shell 将多行文件转换为一行
说实话,虽然对shell编程包括awk有所了解,但是对sed的多行与一行的处理还是不甚理解,在网上搜罗了一篇文章觉得还不错,记录一下:
今天一个工程师问我,怎么将一个文件中的多行转换成一行。
我给出了如下三种方法:
1. 采用awk
awk BEGIN{RS=EOF}'{gsub(/\n/," ");print}' file
说明:awk默认将记录分隔符(record separator即RS)设置为\n,此行代码将RS设置为EOF(文件结束),也就是把文件视为一个记录,然后通过gsub函数将\n替换成空格,最后输出。
2. 采用sed
sed ':a ; N;s/\n/ / ; t a ; ' file
说明:sed默认只按行处理,N可以让其读入下一行,再对\n进行替换,这样就可以将两行并做一行。但是怎么将所有行并作一行呢?可以采用sed的跳转功能。:a 在代码开始处设置一个标记a,在代码执行到结尾处时利用跳转命令t a重新跳转到标号a处,重新执行代码,这样就可以递归的将所有行合并成一行。
3. cat file | xargs
说明:这可能是最简单的一种方式。
This manual page documents the GNU version of xargs. xargs reads argu-
ments from the standard input, delimited by blanks (which can be pro-
tected with double or single quotes or a backslash) or newlines
上面是man手册对xargs的说明。其实xargs就是对shell命令行参数限制做的一个扩展。
这条命令的含义也很简单,将file中的内容作为参数传给X程序
如果用echo作为X程序,则命令为:
cat file | xargs echo
此命令和cat file | xargs 行为一致,因为xargs的默认行为就是打印输出。
unix的一些工具设计很巧妙,每一项工具仅专注于完成一个功能。往往组合起来就能实现很强大的功能。2年前刚刚工作的时候非常喜欢玩弄各种工具,拼凑完成运维的任务。和代码完成的功能一样,但却能顺手拈来,省掉了冗长的程序代码。
最新文章
- Javascript之变量作用域
- 区块链是伟大的,比特币则不然。《FinTech,金融科技时代的来临》。3星。
- css slice和splice
- Redis桌面管理工具 RedisDesktopManager
- Centos7 + Windows7 双系统
- python urllib2的proxyhandler
- swfupload浅谈
- 读书笔记-HBase in Action-第二部分Advanced concepts-(2)Coprocessor
- Linux下用命令格式化U盘
- linux系统文件属性-硬连接、软连接
- Mysql re-set password, mysql set encode utf8 mysql重置密码,mysql设置存储编码格式
- mariadb 压缩包gz安装方式
- python3 OrderedDict类(有序字典)
- SOAR SQL进行优化和改写的自动化工具
- 双击启动tomcat中的startup.bat闪退原因及解决方法
- mysql 导入大文件
- 为DataGridView增加鼠标滚轮功能
- python读取文件操作.CSV
- 【转】基于Ubuntu Server16.04 安装Odoo11
- 查看mysql 库信息和表结构与表创建方法
热门文章
- 企业建立私有云的N个理由
- html颜色设定 - 网址不见了看这里
- 【图灵学院15】极致优化-高性能网络编程之BIO与NIO区别
- fabric java chaincode 开发
- Tarjan+LCA【洛谷P2783】 有机化学之神偶尔会做作弊
- docker 部署net core程序 curl访问地址 提示 Connection reset by peer
- 关于STM32F407启动后的系统时钟频率问题
- Job for postfix.service failed because the control process exited with error code. See ";systemctl status postfix.service"; and ";journalctl -xe"; for details.
- Appium教程——Desired Capabilities 详解(转自TesterHome)
- [转]cron语法