linux日常命令之三
一、换行符
linux换行符为\n,而windows换行符为\r\n。
因此,linux的原生文本文件,换行符为\n,而windows为\r\n;将linux文件拷贝至windows,换行符保持不变,仍为\n,windows同理。
需要注意的是,将windows原生文件拷贝至linux处理时,若要去除换行符,只需去除\n即可,因为linux不识别\r。但是将去除\n的文件再拷回windows时,\r依然存在,需做相应处理。
对于linux长文本而言,去换行符时最好去除\r,以免出问题。linux中,\r为^M,需按住ctrl+V,然后再敲M得到。
二、sed删除换行符\n
使用命令sed "s/\n//g" file发现,没起到任何效果。
经查sed官方用户手册,才得知,sed是按行处理文本数据的,每次处理一行数据后,都会在行尾自动添加trailing newline,其实就是行的分隔符即换行符。
个人理解为,\n作为行结束的标志,并不作为行处理的文本内容。因此需要使用循环处理。
一、使用test跳转命令,实现替换换行符:
sed ":a;N;s/\n//g;ta" a.txt
N是把下一行加入到当前的hold space模式空间里,使之进行后续处理,最后sed会默认打印hold space模式空间里的内容。也就是说,sed是可以处理多行数据的。
:a和ta是配套使用,实现跳转功能。t是test测试的意思。另外还有:a和ba的配套使用方式,也可以实现跳转功能。b是branch分支的意思。
二、使用branch跳转命令,实现替换换行符。
sed ":a;N;s/\n//g;$!ba" a.txt
增加$!ba语句,$的意思是最后一行,不跳转到标记a处,即退出命令循环。
branch和test区别:
branch无论每行执行成功与否,都循环到文本结束;而test在某行执行失败后便跳出循环。
branch
branch循环到文本结束。比如sed ":a;N;s/\n//g;ba" a.txt,转换成自然语言的描述,就是
while(1) {
N;
s/\n//g;
}
test
test可以根据替换命令的完成是否成功,决定是否跳转。比如sed ":a;N;s/\n//g;ta" a.txt,转换成自然语言的描述,就是
while(state == 1) { #默认state就当是1好了。
N;
s/\n//g; #成功,返回state为1;否则返回state=0。此state用于跳转判断。
}
else {
last; #即退出循环语句。
}
原文:https://blog.csdn.net/u011729865/article/details/71773840
三、sed
删除:d,替换:s
sed '2d' file -----删除file文件的第二行
sed '2,$d' file -----删除file文件的第二行到末尾所有行
sed '$d' file -----删除file文件的最后一行
sed '/test/'d file -----删除file文件所有包含test的行 #其中两个’/’用于匹配字符
sed '1~2d' file -----删除奇数行
sed '1~2!d' file -----删除偶数行
sed '/^$/d' file -----删除空行
awk 'NF > 0' file -----删除空行 #NF表示每行的字段数
linux日常命令之三的更多相关文章
- (Linux 日常命令)[20171225]
目的:记录Linux日常所用命令 [20171222]Linux环境下查看硬件组件型号 cat /proc/cpuinfo及lspci 查看CPU [root@t-redhat- ~]# cat /p ...
- linux 日常命令(磁盘空间)
df –hl 在windows下可以很方便的查看磁盘空间的.但是到了Linux查看磁盘空间,你可能就有点摸不着头脑了,呵呵.不要急,我这就要给你解决这个问题. Df命令是Linux查看磁盘空间系统以磁 ...
- linux日常命令之二
ps -ef 查看当前系统所有进程,ps 进程查看命令,-e 显示所有进程,-f 全格式. free -h 查看系统实际使用内存的情况. 显示格式为: total used f ...
- linux日常命令之一
zcat Linux中,cat命令可查看文本内容: 对于压缩包内的文本,可使用zcat命令,在不解压的情况下查看文本内容: iconv file -i 可查看文件字符集: iconv为字符集转换命令, ...
- Linux 日常命令
命令 介绍说明 pwd 打印出当前所在目录 mkdir 创建一个目录 rmdir 删除一个目录 rm 删除文件或目录 -r:删除目录时必须加上 cp 复制一个文件或目录 -r:复制 ...
- Linux日常命令使用记录
scp在跨机器复制的时候为了提高数据的安全性,使用了ssh连接和加密方式,如果机器之间配置了ssh免密码登录,那在使用scp的时候密码都不用输入. 在服务器104.238.161.75上操作,将服务器 ...
- deepin Linux 日常命令、插件、方法等汇总【更新中】
查看系统编码: dawn@dawn-PC:~$ locale LANG=zh_CN.UTF- LANGUAGE=zh_CN LC_CTYPE="zh_CN.UTF-8" LC_NU ...
- 73条日常Linux shell命令汇总,总有一条你需要!
转载: 73条日常Linux shell命令汇总,总有一条你需要! 1.检查远程端口是否对bash开放: echo >/dev/tcp/8.8.8.8/53 && echo &q ...
- linux日常---1、linux下安装、查看、卸载包常用命令
linux日常---1.linux下安装.查看.卸载包常用命令 一.总结 一句话总结: 对比学习 1.linux如何查看系统中安装的程序? rpm -qa # 查看所有安装的软件包 2.linux ...
随机推荐
- CMD控制器常用命令
dir 查看当前路径文件cd..返回上一级路径cd 转到指定的文件夹 \n 将光标移动到下一行的第一格 \t 将光标移动到下一个水平制表位置 mspaint 画图 编译源代码 javac HelloW ...
- 【2.0】SpringBoot连接MySql 8.0的url设置
jdbc:mysql://localhost:3306/enterprise?useUnicode=true&&useSSL=false&&characte ...
- ubuntu14.04 anaconda tensorflow spyder(python3.5) + opencv3
windows上用的tensorflow是依赖于python3.5,因此在linux下也配的3.5 一. 在Anaconda官网上下载Anaconda3-4.0.0-Linux-x86_64.sh文件 ...
- Hadoop-3.0.2 覆盖源代码生效
一.需求背景 基于业务需求,需要修改hadoop源码,将局部源代码修改后,放在自己的工程目录下,由于其相同的路径,想要覆盖掉源码对应部分 二.环境背景 IDEA下,编辑MapReduce任务,打包提交 ...
- 【Core】.NET Core 部署( Docker + CentOS)
CentOS 下 Docker安装 使用脚本安装 Docker (1)安装docker sudo yum install docker (2)启动docker systemctl start do ...
- day5.am--拷贝构造与拷贝赋值
Array& operator = Array(Array const& that){ //避免自赋值 if(&that != this){ //释放旧资源 if(m_arra ...
- 使用Docker方式创建3节点的Etcd集群
一.简要说明 二.运行容器 三.验证集群 四.运行截图 五.参考链接 一.简要说明 参考etcd官网文档, 在node1.node2.node3三个节点上,分别运行etcd容器,创建etcd集 ...
- 虹软SDK在nodejs中的集成
==虹软官网地址== http://www.arcsoft.com.cn 在官网注册账号,并且申请人脸识别激活码, 选择SDK版本和运行系统(windows/linux/android/ios) ,我 ...
- 《SQL 基础教程》第二章:查询基础
这一章的结构如下: SELECT 语句基础 算术运算符和比较运算符 逻辑运算符 SELECT 语句可用于查询数据,并且可以设定条件来查询具有特定值的记录.条件的设定就需要算数运算符.比较运算符和逻辑运 ...
- vs2010下使用sqlite
1.SQLite安装SQlite官网:http://www.sqlite.org/download.html 找到以下截图中内容 第一个解压之后是sqlite3.exe,第二个解压之后是sqlite3 ...