html tool

2017年2月23日星期四

命令行显示内容去掉换行符

参考:http://blog.csdn.net/hello_hwc/article/details/40118129

一个比较有趣的例子
如何替换\n也就是把所有的行都归为一行

第一种方式
[plain] view plain copy
  1. [root@localhost ~]# sed ':a;N;$!ba;s/\n/ /g' file.txt   
  2. wtmp begins Mon Feb 25 14:26:08 2014 192.168.0.1 162.12.0.123 this is the last line  
[popexizhi:
a - 追加
N - Next N 读取下一行的内容并且将这些内容附加到 pattern space 当前的内容后面 (http://blog.khotyn.com/blog/2013/07/30/sed-part-two/
$! - 只有最后一行不执行后面的命令,其他的都执行(这里可以指定行数例如2,3但要求存在此行否则整个命令就执行失败了)
':a;N;3!ba;s/\n/ /g' 就是指对1,3执行这个替换
(http://coolshell.cn/articles/9104.html
第二个示例,反序了一个文件的行:
1
2
3
4
sed '1!G;h;$!d' t.txt
three
two
one
其中的 ‘1!G;h;$!d’ 可拆解为三个命令
  • 1!G —— 只有第一行不执行G命令,将hold space中的内容append回到pattern space
  • h —— 第一行都执行h命令,将pattern space中的内容拷贝到hold space中
  • $!d —— 除了最后一行不执行d命令,其它行都执行d命令,删除当前行
)
: ---   : label  建立 script file 内指令互相参考的位置
b - b label  将执行的指令跳至由 : 建立的参考位置
http://blog.csdn.net/zg_hover/article/details/1804481

这样 ':a;N;$!ba;s/\n/ /g' 可以解释为:
增加标签a,把下一行读入缓冲区,一直读到最后一行-1,跳转到标签a的位置执行s/\n/ /g
所以这里的a可以起任何名字不影响,例如':d;N;$!bd;s/\n/ /g'

hexu共享了另一个sed 脚本也很不错,共享一下

1 {
    h
}

2,${
    H
}

${
    x
    s/\n/|/g
}

]


第二种方式
[plain] view plain copy
  1. [root@localhost ~]# tr "\n" " " < file.txt   
  2. wtmp begins Mon Feb 25 14:26:08 2014 192.168.0.1 162.12.0.123 this is the last line last linen  


没有评论:

发表评论