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

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

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2020-3-25 18:28:05 | 显示全部楼层 |阅读模式
sed -i '/s/$/\'/g' 文本
( T6 @4 j+ u' f- o' Y
) ]4 V6 r! Z& `: D5 \; ? 在文本的行末添加一个字符:
$ u* z9 t. h, }" r( r! j8 t9 f 例子:
3 E! b3 g0 ~4 Vsed -i "s/$/'/g" nv.txt
1 H( ~* A& C! E2 j7 ^( [在行首添加字符 '单引号字符串:% n+ d) z% O9 ^9 a* f! x5 v% N
:%s/^/'/g# H: E9 h* H0 c  N! b5 s9 _% x
例子:
' g5 x! M8 d9 [9 {+ g. Q# lsed -i "s/^/'/g" nv.txt   
& {* q) m9 u# y4 v
# Q5 r8 p, E8 P配合sed命令:* h9 \; m9 f3 d1 x0 K
http://www.bbs168x.cn/forum.php?mod=viewthread&tid=805&highlight=sed
) ~! J. J6 U1 y% Ehttp://www.bbs168x.cn/forum.php?mod=viewthread&tid=199&highlight=sed
" B2 C' K/ j; @. R# b: N2 [2 |http://www.bbs168x.cn/forum.php?mod=viewthread&tid=130&highlight=sed8 C+ j# h$ v! \
5 J( u. C" o" r0 W
http://www.bbs168x.cn/forum.php?mod=viewthread&tid=325&highlight=sed
9 U+ ~! s5 D5 {. Vhttp://www.bbs168x.cn/forum.php?mod=viewthread&tid=606&highlight=sed
8 ]7 `, I; M3 Z  F" [+ ~' g

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2020-3-25 18:30:55 | 显示全部楼层
sed -i 的使用方法,可以参考官方文档。, \5 O* W  H! K/ r1 q
% {3 S% ?/ x8 V2 v
另外sed 的使用方法:; X" T  S7 H# k8 |5 _  K
在每行的行尾添加字符,比如“TAIL”,命令如下:
" O9 m% A0 j. W! O/ Rsed 's/$/&TAI/g' test.file
! k" h! z2 V3 S" _9 n运行结果如下图:
3 X. a6 D* X( f: a7 T0 Z: D1 T/ s) W* r
/ M% y( W; b& U1 @1 nsed 's/$/&TAI/g' nfv.txt6 h1 T, `) N+ |" M: i# _: z. N
''$172.21.78.7'TAI0 H$ ]5 Z; `$ H, x
''$172.21.78.4'TAI
; C, C* {1 B3 \5 R6 B4 H''$172.21.78.1'TAI

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2020-3-25 18:31:35 | 显示全部楼层
要把文件转换一下,有两种方法:0 u' Z, |0 f! y- I! l
1.命令dos2unix test.file
! K/ Y1 |( @6 S) l' f2.去掉"\r" ,用命令sed -i 's/\r//' test.file/ B8 J+ j7 P" R1 y: v1 X) s
7 |- j) g& F2 S7 \" a1 {! K

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2020-3-25 18:32:01 | 显示全部楼层
也可以把两条命令和在一起,在test.file的每一行的行头和行尾分别添加字符"HEAD"、“TAIL”,命令:sed '/./{s/^/HEAD&/;s/$/&TAIL/}' test.file
3 ], I6 ]' A% q1 v3 y( h  q以上其实都还OK,昨天花太多时间,主要因为被处理的文件是用Mysql从数据库提取的结果导出来的,别人给我之后我就直接处理,太脑残了= -我一直有点怀疑之所以结果不对,有可能是windows和linux换行的问题,可是因为对sed不熟,就一直在搞sed。。。。。。。7 @- n7 N8 k% u! A3 e3 }/ I

( J- t+ z8 t0 v0 W众所周知(= -),window和linux的回车换行之云云,如果你知道了,跳过这一段,不知道,读一下呗:; z3 j- U2 T% S% a

( e  t4 H9 X! k+ g# f  T5 IUnix系统里,每行结尾只有“<换行>”,即“\n”;Windows系统里面,每行结尾是“<换行><回 车>”,即“\n\r”。一个直接后果是,Unix系统下的文件在Windows里打开的话,所有文字会变成一行;而Windows里的文件在Unix下打开的话,在每行的结尾可能会多出一个^M符号。
8 c9 ^5 |; m- n  \% @9 Z0 w0 ?0 p7 m/ O. s
好了,所以我的问题就出在被处理的文件的每行末尾都有^M符号,而这通常是看不出来的。可以用"cat -A test.file"命令查看。因此当我想在行尾添加字符的时候,它总是添加在行首且会覆盖掉原来行首的字符。9 J8 @: B. n' _4 K- r. {

( O0 Y4 V' \5 z3 ^2 ~5 U要把文件转换一下,有两种方法:
# u* ~1 a$ e8 L, O% L3 L/ b" q, X1.命令dos2unix test.file
4 ?% \! C# O( `  Z2.去掉"\r" ,用命令sed -i 's/\r//' test.file
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-12 04:29 , Processed in 0.017268 second(s), 23 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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