linux日常命令之三

Posted ohmyuan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux日常命令之三相关的知识,希望对你有一定的参考价值。

换行符

linux换行符为 ,而windows换行符为 。

因此,linux的原生文本文件,换行符为 ,而windows为 ;将linux文件拷贝至windows,换行符保持不变,仍为 ,windows同理。

需要注意的是,将windows原生文件拷贝至linux处理时,若要去除换行符,只需去除 即可,因为linux不识别 。但是将去除 的文件再拷回windows时, 依然存在,需做相应处理。

对于linux长文本而言,去换行符时最好去除 ,以免出问题。linux中, 为^M,需按住ctrl+V,然后再敲M得到。

 

sed删除换行符

使用命令sed "s/ //g" file发现,没起到任何效果。

经查sed官方用户手册,才得知,sed是按行处理文本数据的,每次处理一行数据后,都会在行尾自动添加trailing newline,其实就是行的分隔符即换行符。

个人理解为, 作为行结束的标志,并不作为行处理的文本内容。因此需要使用循环处理。

一、使用test跳转命令,实现替换换行符:

sed ":a;N;s/ //g;ta" a.txt

N是把下一行加入到当前的hold space模式空间里,使之进行后续处理,最后sed会默认打印hold space模式空间里的内容。也就是说,sed是可以处理多行数据的。

:a和ta是配套使用,实现跳转功能。t是test测试的意思。另外还有:a和ba的配套使用方式,也可以实现跳转功能。b是branch分支的意思。

二、使用branch跳转命令,实现替换换行符。

sed ":a;N;s/ //g;$!ba" a.txt

增加$!ba语句,$的意思是最后一行,不跳转到标记a处,即退出命令循环。

 

branch和test区别:

branch无论每行执行成功与否,都循环到文本结束;而test在某行执行失败后便跳出循环。

branch

branch循环到文本结束。比如sed ":a;N;s/ //g;ba" a.txt,转换成自然语言的描述,就是

while(1) {

 N;

 s/ //g;

}

test

test可以根据替换命令的完成是否成功,决定是否跳转。比如sed ":a;N;s/ //g;ta" a.txt,转换成自然语言的描述,就是

while(state == 1) {     #默认state就当是1好了。

 N;

 s/ //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内存从0到1学习笔记(九,内存优化调试之三 - 内存拆解)--- 持续更新

日常linux操作命令日常记录

(Linux 日常命令)[20171222]

Linux运维命令Curl - 日常用法总结

linux日常管理常用命令--w

[转帖]「日常小记」linux中强大且常用命令:findgrep