linux中删除文件内空白行的几种方法。
linux中删除文件内空白行的几种方法
有时你可能需要在 Linux 中删除某个文件中的空行。如果是的,你可以使用下面方法中的其中一个。有很多方法可以做到,但我在这里只是列举一些简单的方法。
你可能已经知道 grep、awk 和 sed 命令是专门用来处理文本数据的工具。
下列 5 种方法可以做到。
◈ sed:过滤和替换文本的流编辑器。
◈ grep:输出匹配到的行。
◈ cat:合并文件并打印内容到标准输出。
◈ tr:替换或删除字符。
◈ awk:awk 工具用于执行 awk 语言编写的程序,专门用于文本处理。
◈ perl:Perl 是一种用于处理文本的编程语言。
我创建了一个 2daygeek.txt 文件来测试这些命令。下面是文件的内容。
yck@yck-virtual-machine:~$ cat 2dayweek.txt
hello world! can you tell me yout name?
现在一切就绪,我们准备开始用多种方法来验证。
使用 sed 命令
sed 是一个流编辑器stream editor。流编辑器是用来编辑输入流(文件或管道)中的文本的。
yck@yck-virtual-machine:~$ sed '/^$/d' 2dayweek.txt
hello world!
can you tell me yout name?
以下是命令展开的细节:
◈ sed: 该命令本身。
◈ //: 标记匹配范围。
◈ ^: 匹配字符串开头。
◈ $: 匹配字符串结尾。
◈ d: 删除匹配的字符串。
◈ 2daygeek.txt: 源文件名。
使用 grep 命令
grep 可以通过正则表达式在文件中搜索。该表达式可以是一行或多行空行分割的字符,grep 会打印所有匹配的内容。
yck@yck-virtual-machine:~$ grep -v "^$" 2dayweek.txt
hello world!
can you tell me yout name?
以下是命令展开的细节:
◈ grep: 该命令本身。
◈ .: 替换任意字符。
◈ ^: 匹配字符串开头。
◈ $: 匹配字符串结尾。
◈ E: 使用扩展正则匹配模式。
◈ e: 使用常规正则匹配模式。
◈ v: 反向匹配。
◈ 2daygeek.txt: 源文件名。
使用 awk 命令
awk 可以执行使用 awk 语言写的脚本,大多是专用于处理文本的。awk 脚本是一系列 awk 命令和正则的组合。
yck@yck-virtual-machine:~$ awk '!/^$/' 2dayweek.txt
hello world!
can you tell me yout name?
以下是命令展开的细节:
◈ awk: 该命令本身。
◈ //: 标记匹配范围。
◈ ^: 匹配字符串开头。
◈ $: 匹配字符串结尾。
◈ .: 匹配任意字符。
◈ !: 删除匹配的字符串。
◈ 2daygeek.txt: 源文件名。
使用 cat 和 tr 命令 组合
cat 是串联(拼接)concatenate的简写。经常用于在 Linux 中读取一个文件的内容。
cat 是在类 Unix 系统中使用频率最高的命令之一。它提供了常用的三个处理文本文件的功能:显示文件内容、将多个文件拼接成一个,以及创建一个新文件。
tr 可以将标准输入中的字符转换,压缩或删除,然后重定向到标准输出。
yck@yck-virtual-machine:~$ cat 2dayweek.txt |tr -s '\n'
hello world!
can you tell me yout name?
以下是命令展开的细节:
◈ cat: cat 命令本身。
◈ tr: tr 命令本身。
◈ |: 管道符号。它可以将前面的命令的标准输出作为下一个命令的标准输入。
◈ s: 替换标数据集中任意多个重复字符为一个。
◈ \n: 添加一个新的换行。◈ 2daygeek.txt: 源文件名。
使用 perl 命令
Perl 表示实用的提取和报告语言Practical Extraction and Reporting Language。Perl 在初期被设计为一个专用于文本处理的编程语言,现在已扩展应用到 Linux 系统管理,网络编程和网站开发等多个领域。
yck@yck-virtual-machine:~$ perl -ne 'print if /\S/' 2dayweek.txt
hello world!
can you tell me yout name?
以下是命令展开的细节:
◈ perl: perl 命令。
◈ n: 逐行读入数据。
◈ e: 执行某个命令。
◈ print: 打印信息。
◈ if: if 条件分支。
◈ //: 标记匹配范围。
◈ \S: 匹配任意非空白字符。
◈ 2daygeek.txt: 源文件名。
linux中删除文件内空白行的几种方法。的更多相关文章
- JAVA中获取文件MD5值的四种方法
JAVA中获取文件MD5值的四种方法其实都很类似,因为核心都是通过JAVA自带的MessageDigest类来实现.获取文件MD5值主要分为三个步骤,第一步获取文件的byte信息,第二步通过Messa ...
- PHP中获取文件扩展名的N种方法
PHP中获取文件扩展名的N种方法 从网上收罗的,基本上就以下这几种方式: 第1种方法:function get_extension($file){substr(strrchr($file, '.'), ...
- Linux中删除文件,磁盘空间未释放问题追踪
在客户使用我们产品后,发现一个问题:在删除了文件后.磁盘空间却没有释放.是有进程在打开这个文件,还是其它情况?我们一起来看看一下两个场景 一. 场景一:进程打开此文件 当一个文件正在被一个进程使用时. ...
- (转载)在Linux下删除文件行末尾的^M符号方法
(转载)http://www.xinfengit.com/200907/1433646.html 由于DOS下的编辑器和linux(linux教程 linux培训 )编辑器对文件行末的回车符处理不一致 ...
- Linux中执行shell脚本命令的4种方法总结
bash shell 脚本的方法有多种,现在作个小结.假设我们编写好的shell脚本的文件名为hello.sh,文件位置在/data/shell目录中并已有执行权限. 方法一:切换到shell脚本所在 ...
- linux中删除文件名称乱码
在最近的操作中发现一些上传的文件有乱码,更改几次都无法正常转换到中文.下面给出正确的解决方案: 使用 ls -i 或者 ls -inum 查找出文件id号(红色字体) [root@localhost ...
- java中得到文件MIME类型的几种方法(转)
本文转载自:http://hotsunshine.iteye.com/blog/857485 使用 javax.activation.MimetypesFileTypeMap 需要引入activat ...
- Linux中删除特殊名称文件的多种方式
今日分享:我们在肉体的疾病方面花了不少钱,精神的病害方面却没有花什么,现在已经到了时候,我们应该有不平凡的学校.--<瓦尔登湖> 前言 我们都知道,在linux删除一个文件可以使用rm命令 ...
- linux中的文件权限chmod
linux中的文件权限chmod 还是GPU集群那点事儿,集群之间磁盘互相挂载,普通用户也可以操作/cu02_nfs./cu04_nfs文件夹,这就牵扯到权限的问题,去google发现所谓的777 ...
随机推荐
- KMP算法的一个简单实现
今天学习KMP算法,参考网上内容,实现算法,摘录网页内容并记录自己的实现如下: 原文出处: http://www.ruanyifeng.com/blog/2013/05/Knuth%E2%80%93M ...
- 多盟、Testin云测、K9test,助阵阿里云1218 移动开发者狂欢
经过双十一.双十二全民剁手狂欢后,阿里巴巴旗下的云计算业务,也为IT程序员们打造一场独特的盛宴. 阿里云计算12月18日对旗下主力云计算产品进行打折促销,云服务商.风投机构等都将参与到这场狂欢中.“我 ...
- C语言字符串操作函数 - strcpy、strcmp、strcat、反转、回文
原文:http://www.cnblogs.com/JCSU/articles/1305401.html C语言字符串操作函数 1. 字符串反转 - strRev2. 字符串复制 - strcpy3. ...
- Javascript之全局变量和局部变量部分讲解
以此文作为自己学习的一个总结. 关于全局变量和局部变量的一句简单的定义:在函数外声明的变量都为全局变量,在函数内声明的为局部变量. 一.局部变量和全局变量重名会覆盖全局变量 var a = 1; fu ...
- Centos7开放端口
Centos7开放端口 Centos升级到7之后,发现无法使用iptables控制Linuxs的端口,google之后发现Centos 7使用firewalld代替了原来的iptables.下面记录如 ...
- Myeclipes连接Mysql数据库配置
相信大家在网站上也找到了许多关于myeclipes如何连接mysql数据库的解决方案,虽然每一步都按照他的步骤来,可到最后还是提示连接失败,有的方案可能应个人设备而异,配置环境不同导致.经过个人多方探 ...
- docker commit 显示“invalid reference format”
docker commit的时候一直显示invalid reference format,改了几次也不行,后来发现是因为docker镜像的名字中不能包含大写字母,改成小写后就行了
- ubuntu 16.04 virtualbox could not insert 'vboxdrv': Required key not available 问题解决方法
从 内核版本 4.4.0-20 开始,在开启了 Secure Boot 的电脑上,未注册的 kernel 模块不再允许执行,所以如果想在保持 Secure Boot 的情况下依然允许执行,我们需要做的 ...
- iotop使用详解
iotop是top和iostat程序的混合体,能够显示系统中所有运行进程并将进程根据I/O统计信息排序. 这个软件使用了Linux内核的一些新特性,所以需要2.6.20或者更新的内核. 一般默认情况下 ...
- docker中自定ingress网络
在某些时候,docker自动生成的ingress网络会与服务器上已经存在的网络产生冲突,这个时候,你需要自定义ingress. 在自定义前,你需要删除所有有端口发布的服务. 使用命令docker ne ...