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

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

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2020-3-25 18:28:05 | 显示全部楼层 |阅读模式
sed -i '/s/$/\'/g' 文本
1 V$ L- Z+ S. b/ u- W: H7 ]/ O0 j( B; K0 A& q2 L! ^$ B8 l
在文本的行末添加一个字符:9 T" E/ @# z- D! h+ j2 e( Q' j
例子:
% e& u9 ~, g8 O- t" c( R' Gsed -i "s/$/'/g" nv.txt8 P9 e! d8 J8 m/ Z$ e0 H3 Z
在行首添加字符 '单引号字符串:
6 y4 u; V- V& B  i. @; ^9 B:%s/^/'/g2 Q, R& H1 n& |; J
例子:7 G5 L) v' p. T/ u: ~' w
sed -i "s/^/'/g" nv.txt   4 C. L1 E8 D* F" D% F

# }6 A1 k( g" G- p' Q- O5 _配合sed命令:
7 L; I& y6 F& s/ G/ }; o$ V' Thttp://www.bbs168x.cn/forum.php?mod=viewthread&tid=805&highlight=sed3 ]. x: C; |. d
http://www.bbs168x.cn/forum.php?mod=viewthread&tid=199&highlight=sed
6 v6 O5 E! k& {: k( N* Rhttp://www.bbs168x.cn/forum.php?mod=viewthread&tid=130&highlight=sed
" z% ^  P" j5 w3 |) G& @
. T! Q% l2 A) Q' q2 Uhttp://www.bbs168x.cn/forum.php?mod=viewthread&tid=325&highlight=sed
# j8 O" `' G! d5 n3 Ehttp://www.bbs168x.cn/forum.php?mod=viewthread&tid=606&highlight=sed7 A$ M' W; H$ N# V* V9 y6 M/ s% {3 K& p, [

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2020-3-25 18:30:55 | 显示全部楼层
sed -i 的使用方法,可以参考官方文档。5 L. \& Z0 Y( }% Q
/ O) R' M8 N# u9 Z1 ]+ u8 m
另外sed 的使用方法:; P* Z2 C# ~8 M9 P& ~6 J7 ?3 Y
在每行的行尾添加字符,比如“TAIL”,命令如下:/ T' F4 J+ R3 T, H  ?
sed 's/$/&TAI/g' test.file" O! \# E6 O% K4 Y  U
运行结果如下图:
5 c1 E( B9 x# N( T7 L" X% [9 b, p' {7 a8 [: g4 D
sed 's/$/&TAI/g' nfv.txt( \# Y- T  t3 M
''$172.21.78.7'TAI3 b1 b$ g% R5 r0 H4 Y# F) I' Z
''$172.21.78.4'TAI
" ^" A6 j; s+ k" R- O% y''$172.21.78.1'TAI

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2020-3-25 18:31:35 | 显示全部楼层
要把文件转换一下,有两种方法:0 i& v$ j( q& J# ]6 i- f
1.命令dos2unix test.file
' A9 H8 C4 I7 w4 A+ V2.去掉"\r" ,用命令sed -i 's/\r//' test.file  a6 U: ^2 f7 s, t* W
* U7 N* j4 L& T( [- D1 O! K

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2020-3-25 18:32:01 | 显示全部楼层
也可以把两条命令和在一起,在test.file的每一行的行头和行尾分别添加字符"HEAD"、“TAIL”,命令:sed '/./{s/^/HEAD&/;s/$/&TAIL/}' test.file
1 l+ |% h7 H3 v, t" r5 `以上其实都还OK,昨天花太多时间,主要因为被处理的文件是用Mysql从数据库提取的结果导出来的,别人给我之后我就直接处理,太脑残了= -我一直有点怀疑之所以结果不对,有可能是windows和linux换行的问题,可是因为对sed不熟,就一直在搞sed。。。。。。。% z' X- Z: L, T" o8 L2 y3 K
! b, S* f' G% j
众所周知(= -),window和linux的回车换行之云云,如果你知道了,跳过这一段,不知道,读一下呗:. M& Z: C/ P- o: A
% q3 |" D( S1 X  m3 p' A( i+ N
Unix系统里,每行结尾只有“<换行>”,即“\n”;Windows系统里面,每行结尾是“<换行><回 车>”,即“\n\r”。一个直接后果是,Unix系统下的文件在Windows里打开的话,所有文字会变成一行;而Windows里的文件在Unix下打开的话,在每行的结尾可能会多出一个^M符号。
& Y" Y! V: c$ U- s
. Q: S: r% L  F( l5 L好了,所以我的问题就出在被处理的文件的每行末尾都有^M符号,而这通常是看不出来的。可以用"cat -A test.file"命令查看。因此当我想在行尾添加字符的时候,它总是添加在行首且会覆盖掉原来行首的字符。
! `* ^8 k. \7 @9 r
& [" @* U7 V7 n2 L$ m要把文件转换一下,有两种方法:
& \, U" ~. h, a1.命令dos2unix test.file
% @$ ^' q7 x2 ?2 h2.去掉"\r" ,用命令sed -i 's/\r//' test.file
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-12 05:31 , Processed in 0.017103 second(s), 22 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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