找回密码
 注册
查看: 4292|回复: 3

使用sed -i参数在文本前或者后添加字符

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2020-3-25 18:28:05 | 显示全部楼层 |阅读模式
sed -i '/s/$/\'/g' 文本
/ A* Z  Y0 E) n* \; v# C2 C( F8 w% m- }9 s; r: a
在文本的行末添加一个字符:$ X9 m% ~5 r3 \
例子:
; J: n$ L' H6 Wsed -i "s/$/'/g" nv.txt
4 Y% `- T/ f6 W在行首添加字符 '单引号字符串:0 ~# N$ a8 v4 e4 r! d  l  x5 \' {
:%s/^/'/g
' `4 X" x% f' S6 Q+ V( L3 g例子:
' y7 {+ p6 X. F: ^8 g4 S  B* _sed -i "s/^/'/g" nv.txt   / R2 e6 f* r# q8 c0 A- I/ u& J
% n; [( [( O7 w# `! g
配合sed命令:
+ X. Q, B$ Z7 G/ Y8 P" Qhttp://www.bbs168x.cn/forum.php?mod=viewthread&tid=805&highlight=sed
, O/ ^* F# n7 ]$ ?3 e4 khttp://www.bbs168x.cn/forum.php?mod=viewthread&tid=199&highlight=sed
+ b, y0 C8 U+ u6 @) [8 f8 h# N% j# Ehttp://www.bbs168x.cn/forum.php?mod=viewthread&tid=130&highlight=sed: U$ Y! O6 q% g4 K) }/ ~
6 h& g0 f( J2 G1 p
http://www.bbs168x.cn/forum.php?mod=viewthread&tid=325&highlight=sed1 U& u, a& y* t9 X# k. ?
http://www.bbs168x.cn/forum.php?mod=viewthread&tid=606&highlight=sed0 R( w2 U3 @# {+ f. |, t  Y" n

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2020-3-25 18:30:55 | 显示全部楼层
sed -i 的使用方法,可以参考官方文档。  ^5 J+ S$ s# n0 Y7 Y1 U
5 ~' t, P: }' d+ ?- t' z8 `3 Q7 z
另外sed 的使用方法:8 u6 B7 Y7 E# G' p. h! O
在每行的行尾添加字符,比如“TAIL”,命令如下:: \' `% y- y8 h1 [. Q% [5 h. x2 ~
sed 's/$/&TAI/g' test.file
' s* z- y& p6 N* L: h2 ]运行结果如下图:9 P+ V4 t: }  K; ?4 x! m

9 ]1 G; u! i1 B: i2 [sed 's/$/&TAI/g' nfv.txt7 T- S8 X( D* k- k+ M# ]
''$172.21.78.7'TAI
# P: ]& l5 d1 w7 ~3 z''$172.21.78.4'TAI! b2 k0 g" ]& t7 g4 i- E6 p
''$172.21.78.1'TAI

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2020-3-25 18:31:35 | 显示全部楼层
要把文件转换一下,有两种方法:
1 q. y2 m$ @& A3 m& m9 s/ A8 C1.命令dos2unix test.file/ t: Y. N* |( h/ f9 Z& {/ M
2.去掉"\r" ,用命令sed -i 's/\r//' test.file
: h9 X) W+ |. v) b+ N- b; _$ T. X( _; t. R

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2020-3-25 18:32:01 | 显示全部楼层
也可以把两条命令和在一起,在test.file的每一行的行头和行尾分别添加字符"HEAD"、“TAIL”,命令:sed '/./{s/^/HEAD&/;s/$/&TAIL/}' test.file
- j# c+ l0 s6 a: E: J+ a以上其实都还OK,昨天花太多时间,主要因为被处理的文件是用Mysql从数据库提取的结果导出来的,别人给我之后我就直接处理,太脑残了= -我一直有点怀疑之所以结果不对,有可能是windows和linux换行的问题,可是因为对sed不熟,就一直在搞sed。。。。。。。
3 R8 H4 I1 _! [+ W: f1 x0 }
# y$ ^: F/ }) X/ o1 r# T众所周知(= -),window和linux的回车换行之云云,如果你知道了,跳过这一段,不知道,读一下呗:
6 t7 Z( y1 ^: M% u# u2 D2 s0 }0 b& F; z" Z2 W
Unix系统里,每行结尾只有“<换行>”,即“\n”;Windows系统里面,每行结尾是“<换行><回 车>”,即“\n\r”。一个直接后果是,Unix系统下的文件在Windows里打开的话,所有文字会变成一行;而Windows里的文件在Unix下打开的话,在每行的结尾可能会多出一个^M符号。( i" K% ^5 X; t* h
% T. B2 D% r% Y7 K! H* Q/ V1 d
好了,所以我的问题就出在被处理的文件的每行末尾都有^M符号,而这通常是看不出来的。可以用"cat -A test.file"命令查看。因此当我想在行尾添加字符的时候,它总是添加在行首且会覆盖掉原来行首的字符。5 B5 i" E% ^$ S' r3 O
5 y5 o. O5 r6 p0 ~  X& {
要把文件转换一下,有两种方法:
: i/ m! X6 f6 b1.命令dos2unix test.file
  \' h, h5 v' j( I0 R2.去掉"\r" ,用命令sed -i 's/\r//' test.file
您需要登录后才可以回帖 登录 | 注册

本版积分规则

返回首页|Archiver|手机版|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )

GMT+8, 2026-6-12 04:34 , Processed in 0.022244 second(s), 22 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表