sed 去掉所有的换行符

  • sed 替换所有的换行符,命令如下

    
    echo -e "hello\nworld" | sed ':label;N;s/\n//g;b label'
    
    
    • :label; 定位标签,用来实现跳转处理,名字随便取(label),后面的b label就是跳转指令
    • N; N是sed的一个处理命令,追加文本流中的下一行到模式空间进行合并处理,设定换行符可见
    • s/\n//g; s是sed的替换命令,将换行符替换为冒号
    • b label 或者 t label b / t 是跳转命令,跳转到指定标签

    上述命令不支持在 Mac 上运行(暂时没找出原因)。下面这个可以,只是更复杂一点

    
    echo -e "hello\nworld" | sed -n -e 'H;${x;s/\n//g;p;}'
    
    

    -n 这个参数是必须的,去掉的话会输出每行的处理结果,当然,也可以通过不加这个参数,来看这行命令是怎么工作的
    $ 表示最后一行
    {...} 表示一个函数组
    H; 将 pattern 空间的内容加到 hold 空间
    x; 交换 pattern 空间和 hold 空间的内容
    p; 将模式空间的内容输出到标准输出

    这里涉及到了两个概念:模式空间(pattern space) 和 储存空间(hold space)。大概理解就是,sed 是一行一行处理文本的,模式空间用于临时存储每一行处理后的文本,在“处理”的过程中,可以通过 function 把模式空间的内容先存储到储存空间,上面的 H 就是干这个事的;之后又可以通过 x 等 function 把储存空间的东西移到模式空间里来继续处理。

    这个命令的意思就是:

    • 首先通过 H 函数把一行的文本存储到储存空间;
    • $ 表示只有最后一行才执行接下来的 {...} 函数组,这样,每一行的内容就都去了储存空间;
    • 到了最后一行,开始执行函数组,首先通过 x 函数把储存空间的东西移到模式空间;
    • 通过 s/\n//g 这个替换函数把换行符替换掉;
    • 最后是 p 函数把模式空间的东西输出来,结束。

    这个命令也可以在 Linux 上运行。

转载至https://www.csdn.net/tags/OtDaIg1sNzM0ODUtYmxvZwO0O0OO0O0O.html

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值