码迷,mamicode.com
首页 > 其他好文 > 详细

处理文本的一些小的技巧

时间:2019-04-23 17:05:04      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:linu   技术   打开   ddd   etl   head   添加   div   出现   

grep 精准过滤

如果是有进程名为abcd,abcde等有包含"abc"字符的,那么判断将会不准备,如果精确的匹配到abc呢,当时不知道,只能很诚实的回答,不清楚
 
其实答案很简单,用grep –w "abc" 或者是grep "\<abc\>"都可以实现
-w, --word-regexp         强制 PATTERN 仅完全匹配字词
 
 

假设文本中的内容为:

aaaa

bbbb

ccccc

dddd

要求将文本内容处理为:

aaaa bbbb

cccc dddd

(中间以制表符分隔)

方法一:

sed -n ‘{N;s/\n/\t/p}‘ test.txt

 

方法二:

awk ‘{tmp=$0;getline;print tmp"\t"$0}‘ test.txt

 
 

昨天写一个脚本花了一天的2/3的时间,而且大部分时间都耗在了sed命令上,今天不总结一下都对不起昨天流逝的时间啊~~~

 

用sed命令在行首或行尾添加字符的命令有以下几种:

假设处理的文本为test.file

技术图片

在每行的头添加字符,比如"HEAD",命令如下:

sed ‘s/^/HEAD&/g‘ test.file

在每行的行尾添加字符,比如“TAIL”,命令如下:

sed ‘s/$/&TAIL/g‘ test.file

运行结果如下图:

技术图片

几点说明:

1."^"代表行首,"$"代表行尾

2.‘s/$/&TAIL/g‘中的字符g代表每行出现的字符全部替换,如果想在特定字符处添加,g就有用了,否则只会替换每行第一个,而不继续往后找了

例:

技术图片

3.如果想导出文件,在命令末尾加"> outfile_name";如果想在原文件上更改,添加选项"-i",如

技术图片

4.也可以把两条命令和在一起,在test.file的每一行的行头和行尾分别添加字符"HEAD"、“TAIL”,命令:sed ‘/./{s/^/HEAD&/;s/$/&TAIL/}‘ test.file

 

 

以上其实都还OK,昨天花太多时间,主要因为被处理的文件是用mysql从数据库提取的结果导出来的,别人给我之后我就直接处理,太脑残了= -我一直有点怀疑之所以结果不对,有可能是windows和linux换行的问题,可是因为对sed不熟,就一直在搞sed。。。。。。。

 

众所周知(= -),window和linux的回车换行之云云,如果你知道了,跳过这一段,不知道,读一下呗:

Unix系统里,每行结尾只有“<换行>”,即“\n”;Windows系统里面,每行结尾是“<换行><回 车>”,即“\n\r”。一个直接后果是,Unix系统下的文件在Windows里打开的话,所有文字会变成一行;而Windows里的文件在Unix下打开的话,在每行的结尾可能会多出一个^M符号。

 

好了,所以我的问题就出在被处理的文件的每行末尾都有^M符号,而这通常是看不出来的。可以用"cat -A test.file"命令查看。因此当我想在行尾添加字符的时候,它总是添加在行首且会覆盖掉原来行首的字符。

要把文件转换一下,有两种方法:

1.命令dos2unix test.file

2.去掉"\r" ,用命令sed -i ‘s/\r//‘ test.file

好了,这样处理完,就OK啦!!!

处理文本的一些小的技巧

标签:linu   技术   打开   ddd   etl   head   添加   div   出现   

原文地址:https://www.cnblogs.com/augusite/p/10757288.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!