sed删除前N个字符
来源:互联网 发布:驷惠软件视频教程 编辑:程序博客网 时间:2024/05/04 13:23
vim sed删除前N个字符 删除空行等 [转]
2009-12-04 13:11
blog.chinaunix.net/u2/76292/showart_1210882.html
blog.chinaunix.net/u1/46039/showart_373817.html
>>>>sed
删除前N个字符
sed -i 's/^..//' file (N个.表示N个字符)
sed s/[[:space:]]//g filename 删除空格
sed /^$/d filename 删除空行
1.合并行
zj@zj:~/Script/blog_script$ cat test1
1
2
3
4
合并上下两行
zj@zj:~/Script/blog_script$ sed '$!N;s//n//t/' test1
1 2
3 4
合并匹配模式及其下一行
zj@zj:~/Script/blog_script$ sed '/2/{N;s//n//t/}' test1
1
2 3
4
合并所有行
zj@zj:~/Script/blog_script$ sed ':a;N;s//n//t/;ba;' test1
1 2 3 4
2.交换行
2.1已知行号时交换两行
zj@zj:~/Script/blog_script$ cat test
baidu music so terrible so bad
microsoft haha haha
yahoo byebye
google princess so good
这里是交换1,4行.当然你可以根据自己需要修改
zj@zj:~/Script/blog_script$ for(( i=1;i<=4;i++ )); do case $i in 1) sed -n 4p test;; 4) sed -n 1p test;; *) sed -n ${i}p test;; esac; done
google princess so good
microsoft haha haha
yahoo byebye
baidu music so terrible so bad
连续时好说:
zj@zj:~/Script/blog_script$ sed '1{h;d};2{G}' test
microsoft haha haha
baidu music so terrible so bad
yahoo byebye
google princess so good
2.2不知道行号
要交换的两行是连续行的情况下:
zj@zj:~/Script/blog_script$ sed '/baidu/{h;d};/microsoft/{G}' test
microsoft haha haha
baidu music so terrible so bad
yahoo byebye
google princess so good
ps:交换包含bai与microsoft的行
两行不连续的情况:
zj@zj:~/Script/blog_script$ sed '/baidu/{:a;N;/google/!ba;s//([^/n]*/)/n/(.*/)/n/(.*/)//3/n/2/n/1/}' test
google princess so good
microsoft haha haha
yahoo byebye
baidu music so terrible so bad
ps:交换含有baidu与google的行
研究了下写了个不论连续不连续的都可以的:
zj@zj:~/Script/blog_script$ sed '/baidu/{:a;N;/microsoft/!ba;/[^/n]*baidu[^/n]*/n[^/n]*microsoft[^/n]*$/{s//([^/n]*baidu[^/n]*/)/n/(.*/)//2/n/1/};s//([^/n]*/)/n/(.*/)/n/(.*/)//3/n/2/n/1/}' test
microsoft haha haha
baidu music so terrible so bad
yahoo byebye
google princess so good
zj@zj:~/Script/blog_script$ sed '/baidu/{:a;N;/google/!ba;/[^/n]*baidu[^/n]*/n[^/n]*google[^/n]*$/{s//([^/n]*baidu[^/n]*/)/n/(.*/)//2/n/1/;};s//([^/n]*/)/n/(.*/)/n/(.*/)//3/n/2/n/1/}' test
google princess so good
microsoft haha haha
yahoo byebye
baidu music so terrible so bad
ps:上面代码
/baidu/{....} 遇到含有baidu的行,开始做{}中的命令序列
:a;N;/google/!ba 循环读信息,直到读取google.
/[^/n]*baidu[^/n]*/n[^/n]*google[^/n]*$/这个就是说如果哦baidu与google之间只有一个/n,即这两个是连续行就:{s//([^/n]*baidu[^/n]*/)/n/(.*/)//2/n/1/;}交换这两行
如果不匹配上面的模式就是说不是连续行了.
s//([^/n]*/)/n/(.*/)/n/(.*/)//3/n/2/n/1/}
而在匹配连续行的情况下是不可能匹配上面表达式的.ok~~~~
3.忘了还有交互奇偶行
zj@zj:~/Script/blog_script$ sed '$!N;s//([^/n]*/)/n/([^/n]*/)//2/n/1/' test
microsoft haha haha
baidu music so terrible so bad
google princess so good
yahoo byebye
4.删除行就不用说了吧
d喽....
5.删除空行
sed '/^$/d' test2
删除多个空行为一个空行
sed '/^$/{N;/^/n*$/D}' test2
1
2
3
4
合并上下两行
zj@zj:~/Script/blog_script$ sed '$!N;s//n//t/' test1
1 2
3 4
合并匹配模式及其下一行
zj@zj:~/Script/blog_script$ sed '/2/{N;s//n//t/}' test1
1
2 3
4
合并所有行
zj@zj:~/Script/blog_script$ sed ':a;N;s//n//t/;ba;' test1
1 2 3 4
2.交换行
2.1已知行号时交换两行
zj@zj:~/Script/blog_script$ cat test
baidu music so terrible so bad
microsoft haha haha
yahoo byebye
google princess so good
这里是交换1,4行.当然你可以根据自己需要修改
zj@zj:~/Script/blog_script$ for(( i=1;i<=4;i++ )); do case $i in 1) sed -n 4p test;; 4) sed -n 1p test;; *) sed -n ${i}p test;; esac; done
google princess so good
microsoft haha haha
yahoo byebye
baidu music so terrible so bad
连续时好说:
zj@zj:~/Script/blog_script$ sed '1{h;d};2{G}' test
microsoft haha haha
baidu music so terrible so bad
yahoo byebye
google princess so good
2.2不知道行号
要交换的两行是连续行的情况下:
zj@zj:~/Script/blog_script$ sed '/baidu/{h;d};/microsoft/{G}' test
microsoft haha haha
baidu music so terrible so bad
yahoo byebye
google princess so good
ps:交换包含bai与microsoft的行
两行不连续的情况:
zj@zj:~/Script/blog_script$ sed '/baidu/{:a;N;/google/!ba;s//([^/n]*/)/n/(.*/)/n/(.*/)//3/n/2/n/1/}' test
google princess so good
microsoft haha haha
yahoo byebye
baidu music so terrible so bad
ps:交换含有baidu与google的行
研究了下写了个不论连续不连续的都可以的:
zj@zj:~/Script/blog_script$ sed '/baidu/{:a;N;/microsoft/!ba;/[^/n]*baidu[^/n]*/n[^/n]*microsoft[^/n]*$/{s//([^/n]*baidu[^/n]*/)/n/(.*/)//2/n/1/};s//([^/n]*/)/n/(.*/)/n/(.*/)//3/n/2/n/1/}' test
microsoft haha haha
baidu music so terrible so bad
yahoo byebye
google princess so good
zj@zj:~/Script/blog_script$ sed '/baidu/{:a;N;/google/!ba;/[^/n]*baidu[^/n]*/n[^/n]*google[^/n]*$/{s//([^/n]*baidu[^/n]*/)/n/(.*/)//2/n/1/;};s//([^/n]*/)/n/(.*/)/n/(.*/)//3/n/2/n/1/}' test
google princess so good
microsoft haha haha
yahoo byebye
baidu music so terrible so bad
ps:上面代码
/baidu/{....} 遇到含有baidu的行,开始做{}中的命令序列
:a;N;/google/!ba 循环读信息,直到读取google.
/[^/n]*baidu[^/n]*/n[^/n]*google[^/n]*$/这个就是说如果哦baidu与google之间只有一个/n,即这两个是连续行就:{s//([^/n]*baidu[^/n]*/)/n/(.*/)//2/n/1/;}交换这两行
如果不匹配上面的模式就是说不是连续行了.
s//([^/n]*/)/n/(.*/)/n/(.*/)//3/n/2/n/1/}
而在匹配连续行的情况下是不可能匹配上面表达式的.ok~~~~
3.忘了还有交互奇偶行
zj@zj:~/Script/blog_script$ sed '$!N;s//([^/n]*/)/n/([^/n]*/)//2/n/1/' test
microsoft haha haha
baidu music so terrible so bad
google princess so good
yahoo byebye
4.删除行就不用说了吧
d喽....
5.删除空行
sed '/^$/d' test2
删除多个空行为一个空行
sed '/^$/{N;/^/n*$/D}' test2
>>>>vim
删除前N个字符
步骤:
vi file
按shift :
然后输入g/../s///
回车!
:%s/^..//
:%s#^..##g
vim aaaaa.txt
按ctrl+v进入列模式。
按向下方向键选择要删除的列。
按向右方向键选择要删除的字符(2下则删除2个字符)
x删除
esc退出
- sed删除前N个字符
- sed删除文件中的每行前n个字符
- sed删除前N个字符,空格或空行
- vim 删除每行前/后n个字符
- linux 删除文件前N个字符(把文件前N个字符删除了) 和 截取文件前N个字符(只是获取显示前N个字符,但不删除)
- 返回前n个字符
- 使用sed替换一个字符为N个字符
- [字符串]strncasecmp() -- 比较字符串的前n个字符
- 实现字符串(char*)的前N个字符放到后面
- 截取字符串,只截取前N个字节的字符
- PHP中读取字符串前N个字符
- HDOJ/HDU 1984 Mispelling4(删除第n个字符~)
- 将字符串截短,取前n个字符,英文算半个字符
- 将字符串str2的前n个字符复制到字符数组str1中
- PHP中读取(截取substr)字符串前N个字符或者从第几个字符开始取几个字符
- PHP中读取(截取substr)字符串前N个字符或者从第几个字符开始取几个字符
- sed找到关键字所在行并将其前面的第一个字符删除
- HDU 2594 Simpsons’ Hidden Talents(KMP+A串的前n个字符与B串的后n个字符相同,使n尽可能大)
- AMI CORE8 OEM BIOS开发入门
- sed 疑问1
- comboBox下拉后鼠标移动到子项时出现对应的提示
- c语言 小知识
- AMI CORE8 OEM BIOS
- sed删除前N个字符
- SMBIOS debug
- 监控ARP缓存
- (转) 面试困惑问与答——感觉挺好,为啥被拒了?
- 如何实现SQLSERVER2005数据库同步(数据库镜像)技术 SQLServer2005同步复制技术实现
- VC 将位图放到计算机桌面上
- sgu 119 Magic Pairs
- VBS对excel的操作--转自百度文库
- 我的网站建好了