一、换行符

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日常命令之三的更多相关文章

  1. (Linux 日常命令)[20171225]

    目的:记录Linux日常所用命令 [20171222]Linux环境下查看硬件组件型号 cat /proc/cpuinfo及lspci 查看CPU [root@t-redhat- ~]# cat /p ...

  2. linux 日常命令(磁盘空间)

    df –hl 在windows下可以很方便的查看磁盘空间的.但是到了Linux查看磁盘空间,你可能就有点摸不着头脑了,呵呵.不要急,我这就要给你解决这个问题. Df命令是Linux查看磁盘空间系统以磁 ...

  3. linux日常命令之二

    ps -ef 查看当前系统所有进程,ps 进程查看命令,-e 显示所有进程,-f 全格式. free -h 查看系统实际使用内存的情况. 显示格式为: total       used       f ...

  4. linux日常命令之一

    zcat Linux中,cat命令可查看文本内容: 对于压缩包内的文本,可使用zcat命令,在不解压的情况下查看文本内容: iconv file -i 可查看文件字符集: iconv为字符集转换命令, ...

  5. Linux 日常命令

    命令 介绍说明  pwd  打印出当前所在目录  mkdir  创建一个目录  rmdir  删除一个目录  rm  删除文件或目录 -r:删除目录时必须加上  cp  复制一个文件或目录 -r:复制 ...

  6. Linux日常命令使用记录

    scp在跨机器复制的时候为了提高数据的安全性,使用了ssh连接和加密方式,如果机器之间配置了ssh免密码登录,那在使用scp的时候密码都不用输入. 在服务器104.238.161.75上操作,将服务器 ...

  7. deepin Linux 日常命令、插件、方法等汇总【更新中】

    查看系统编码: dawn@dawn-PC:~$ locale LANG=zh_CN.UTF- LANGUAGE=zh_CN LC_CTYPE="zh_CN.UTF-8" LC_NU ...

  8. 73条日常Linux shell命令汇总,总有一条你需要!

    转载: 73条日常Linux shell命令汇总,总有一条你需要! 1.检查远程端口是否对bash开放: echo >/dev/tcp/8.8.8.8/53 && echo &q ...

  9. linux日常---1、linux下安装、查看、卸载包常用命令

    linux日常---1.linux下安装.查看.卸载包常用命令 一.总结 一句话总结: 对比学习 1.linux如何查看系统中安装的程序? rpm -qa   # 查看所有安装的软件包 2.linux ...

随机推荐

  1. ts文件编译后变量在vscode里报错

    需要将编译过的同名js文件删除才可以

  2. 自动化测试系列:自动化测试KPI考评的一种方法

    更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 原文链接:http://www.cnblogs.com/zishi/p/6856204.html 众所周知,在IT ...

  3. 关于vim的折叠

    参考: http://www.cnblogs.com/fakis/archive/2011/04/14/2016213.html 和 这篇文章: https://blog.csdn.net/benda ...

  4. linux中使用ifconfig命令查看网卡信息时显示为eth1,但是在network-scripts中只有ifcfg-eth0的配置文件,并且里面的NAME="eth0"。

    除了题目中的问题,其实在执行命令:service network restart时,会报错: 解决办法: 首先需要修改70-persistent-net.rules文件: vim /etc/udev/ ...

  5. IdentityServer4中Code/Token/IdToken对应可访问的资源(api/identity)

    { OidcConstants.ResponseTypes.Code, ScopeRequirement.None }, { OidcConstants.ResponseTypes.Token, Sc ...

  6. 测试是否支持辨别tex公式

    1.首先启动博客园公式编写支持(latex) 2.编写公式 3.结果 $a+b=5$ $c+d=7$

  7. python tar 打包

    import os import tarfile def make_targz_one_by_one(output_filename, source_dir): tar = tarfile.open( ...

  8. MySQL连接java

    1.创建一个java project,建一个lib文件. 下载MySQL-connecor. 将下载好的文件打开,将mysql-connector-java-5.0.8-bin.jar文件粘贴复制到l ...

  9. [easyUI] lazyload 懒加载

    1.使用<img>标签将图片都写在网页上. <div style="height:450px;"><h1>请往下看,有图片的吆!</h1& ...

  10. linux文件管理之链接文件

    文件链接 ====================================================================================软链接 或 符号链接硬 ...