• 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表示每行的字段数

  • 相关阅读:
    机器学习问题
    sklearn学习笔记
    机器学习之广义线性模型
    因子学习笔记、问题汇总
    数学相关知识汇总
    下载技巧汇总
    python scipy库
    20180122 PyTorch学习资料汇总
    机器学习基本概念笔记
    机械学习框架、分类
  • 原文地址:https://www.cnblogs.com/ohmyuan/p/10123348.html
Copyright © 2020-2023  润新知