ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

sed 用法(转)

2022-04-08 11:32:46  阅读:135  来源: 互联网

标签:26 df 08 用法 sed 2008 txt


sed 比较实用的(去掉windows下回车符及空白符)

windows下的回车符为 /r/n   而unix下的回车符是 /n
1.去掉所有行的空格
sed -i 's/ //g'   df.txt
2.去掉所有行的空格
sed -e 's/ //g'   df.txt >cwm.txt
3.将每一行拖尾的“空白字符”(空格,制表符)删除
sed 's/ *$//' df.txt   >cwm.txt
4.将每一行中的前导和拖尾的空白字符删除
sed 's/^ *//;s/ *$//' df.txt   >cwm.txt
5.去掉空行
sed    '/^$/d' df.txt >cwm.txt
sed -e '/^$/d' df.txt >cwm.txt
sed -i '/^$/d' df.txt
这三个是等价的 但第三个会改变原文件

6.去掉windows下的回车符 (注意^M 在linux 下写法 按^M 是回车换行符,输入方法是按住CTRL+v,松开v,按m)
sed -i 's/^M//g' df.txt  
7.去掉windows下的回车符 (注意^M 在linux 下写法 按^M 是回车换行符,输入方法是按住CTRL+v,松开v,按m)
sed -e 's/^M//g' df.txt >cwm.txt
8.sed 用正则表达式 8个字符一组换行

echo "aaaaaaaabbbbbbbbccccccccdddddddd"|sed 's/./{8/}/&/n/g'
aaaaaaaa
        bbbbbbbb
         cccccccc
        dddddddd
也等价于
dos2unix df.txt >cwm.txt
******如何去掉文件中行尾的回车符号^M******
sed 's/^M//g w newfilename' oldfilename
其中:
s 表示Searchg 表示搜索全文,缺省是搜索第一个^M 是回车换行符,输入方法是按住CTRL+v,松开v,按m
w 表示写到新文件中.

例子1
86103113234778,
86103145878770,
86103116778768,
86103111879708, sed 's/^86//;s/,$//' user.txt     #去掉开头的86 及尾部的,号

例子2
103113234778
103145878770
103116778768
103111879708
sed -e 's/^/86/'    user.txt      #每行行首加上86
86103113234778
86103145878770
86103116778768
86103111879708
------------------------------------------------------------------
我有一个文件:
aaa,
bbb,

ccc,
ddd,

eee,
fff,


想删除第3,6,9。。。的空行并且合并12,45,78。。。行,
结果如下:
aaa,bbb,
ccc,ddd,
eee,fff,
.......

解法
sed -e '/^$/d' -e 'N;s//n//g'
或
sed 'N;N;s//n//g' (行数必须是3的倍数,不然最后一行不对)

对于替换单引号外层应加双引号

sed "s/^/'/;s/$/'/" 营帐GPRS用户.txt
===========================================================================


用sed 模式空间把时间格式加个空格
[oracle@TestAs4 filter]$ more nd_td.txt
13211124412,2008-08-2613:24:07,2008-08-2615:28:39
13144035749,2008-08-2613:24:06,2008-08-2615:30:39
13144023993,2008-08-2613:19:11,2008-08-2615:37:34
13006601565,2008-08-2612:04:15,2008-08-2615:40:34
13178665198,2008-08-2613:17:49,2008-08-2615:42:35
13058107546,2008-08-2613:08:41,2008-08-2615:49:35
13246005230,2008-08-2613:27:20,2008-08-2615:54:36

[oracle@TestAs4 filter]$ sed 's//(2008-[0-9][0-9]-[0-9][0-9]/)/& /g' nd_td.txt |more
13211124412,2008-08-26 13:24:07,2008-08-26 15:28:39
13144035749,2008-08-26 13:24:06,2008-08-26 15:30:39
13144023993,2008-08-26 13:19:11,2008-08-26 15:37:34
13006601565,2008-08-26 12:04:15,2008-08-26 15:40:34
13178665198,2008-08-26 13:17:49,2008-08-26 15:42:35
13058107546,2008-08-26 13:08:41,2008-08-26 15:49:35
13246005230,2008-08-26 13:27:20,2008-08-26 15:54:36
13169867085,2008-08-26 13:18:14,2008-08-26 15:58:34
13043484284,2008-08-26 12:04:07,2008-08-26 16:03:35

以下两个都是利用模式空间替换实现的
sed 's//(2008-[0-9][0-9]-[0-9][0-9]/)//1 /g' nd_td.txt |more
sed 's//(2008-[0-9][0-9]-[0-9][0-9]/)/([0-9][0-9]:[0-9][0-9]:[0-9][0-9]/)//1 /2/g' nd_td.txt |more


#echo ${orjtext0.txt//[!a-z]||[!0-9]} >orjtext1.txt
#sed -e 's/^M//g' orjtext01.txt >orjtext0.txt
#cat   orjtext0.txt|sed s//n/r//n/ >orjtext01.txt
#doc2unix   orjtext0.txt    orjtext01.txt
col   -b   <   orjtext0.txt   >   orjtext01.txt

 

cat orjtext01.txt|grep -v '^#'|sed '/^$/d' >>orjtext02.txt #把#号注释掉的和空行去掉
#sed -e 's/^#//' orjtext01.txt >orjtext02.txt #把#号注释掉的行去掉
#sed -i '/^[ /t]*///#d' orjtext01.txt

 


有时当进行某些配置文件的查看时,分去除注释(如:"#"),但之后还会发现中间也许会有好多空行,所以,现小结一下去除空行的方法。
1)用tr命令
# grep -v "#" /etc/snmp/snmpd.conf | tr -s '/n'
2)用sed命令
# grep -v "#" /etc/snmp/snmpd.conf | sed '/^$/d'
3)用awk命令
# grep -v "#" /etc/snmp/snmpd.conf | awk '{if($0!="")print}'
4)用grep命令
# grep -v "#" /etc/snmp/snmpd.conf | grep -v "^$"

  

标签:26,df,08,用法,sed,2008,txt
来源: https://www.cnblogs.com/dbasupport/p/16116040.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有