易陆发现互联网技术论坛

 找回密码
 开始注册
查看: 4285|回复: 3
收起左侧

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

[复制链接]
发表于 2020-3-25 18:28:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?开始注册

x
sed -i '/s/$/\'/g' 文本0 w0 W' W9 U. ]' s

* n! o+ ]0 M6 \ 在文本的行末添加一个字符:
2 Y; U# i8 s% n 例子:
. \" K/ z3 a5 ^: Q; Ised -i "s/$/'/g" nv.txt
% E4 s+ _3 _# R, X+ t+ h; ?在行首添加字符 '单引号字符串:2 n1 v9 c. x# g* M2 s0 _2 [
:%s/^/'/g3 X- V) k( }, u4 k% }+ y5 Z
例子:  G2 G5 K' @% ^# U+ F
sed -i "s/^/'/g" nv.txt   
) X$ p% @$ }2 K( y) c/ }6 ]' J7 S! s8 y# D* w# k
配合sed命令:
/ Y2 I5 d( m* {. Q4 P* ~http://www.bbs168x.cn/forum.php?mod=viewthread&tid=805&highlight=sed
5 h9 S2 t5 L4 A' K8 fhttp://www.bbs168x.cn/forum.php?mod=viewthread&tid=199&highlight=sed
! S! z* A+ a6 u9 u* y- Qhttp://www.bbs168x.cn/forum.php?mod=viewthread&tid=130&highlight=sed
% ^) D+ i" J9 P4 f- Q# \
0 s1 F+ D& W7 v, ~: e1 @& qhttp://www.bbs168x.cn/forum.php?mod=viewthread&tid=325&highlight=sed' l- ?6 u3 C: f3 e8 i% f
http://www.bbs168x.cn/forum.php?mod=viewthread&tid=606&highlight=sed
+ h0 m5 E5 q1 ?2 m( Q
 楼主| 发表于 2020-3-25 18:30:55 | 显示全部楼层
sed -i 的使用方法,可以参考官方文档。2 ?- D* P8 P- R1 j7 u+ V
1 |- G/ f2 V  U
另外sed 的使用方法:
1 z+ o; e$ M2 F  W! `2 \! U- M% J  `$ G在每行的行尾添加字符,比如“TAIL”,命令如下:
$ v3 O1 h- w4 h6 v# i  x- Rsed 's/$/&TAI/g' test.file1 y4 h" q% [" Z. W( N+ Z
运行结果如下图:
, ]3 j  }4 y3 L% O" R  W
( w1 u+ D0 P: D6 fsed 's/$/&TAI/g' nfv.txt
7 z& I* n( t& @4 r''$172.21.78.7'TAI8 w" U/ w$ @4 m# H/ B
''$172.21.78.4'TAI
  s1 d4 y; J6 z! L2 d''$172.21.78.1'TAI
 楼主| 发表于 2020-3-25 18:31:35 | 显示全部楼层
要把文件转换一下,有两种方法:2 l% ~* [* Y2 p
1.命令dos2unix test.file1 v0 R+ l( h' y  m1 O
2.去掉"\r" ,用命令sed -i 's/\r//' test.file
8 k- Z5 k4 l. {$ x" K9 Z+ p, a1 Z, V
 楼主| 发表于 2020-3-25 18:32:01 | 显示全部楼层
也可以把两条命令和在一起,在test.file的每一行的行头和行尾分别添加字符"HEAD"、“TAIL”,命令:sed '/./{s/^/HEAD&/;s/$/&TAIL/}' test.file. a( }7 P+ c3 F6 E+ t6 Q
以上其实都还OK,昨天花太多时间,主要因为被处理的文件是用Mysql从数据库提取的结果导出来的,别人给我之后我就直接处理,太脑残了= -我一直有点怀疑之所以结果不对,有可能是windows和linux换行的问题,可是因为对sed不熟,就一直在搞sed。。。。。。。
+ D( \( l' T0 X# c
1 C1 E2 T9 C1 `& S众所周知(= -),window和linux的回车换行之云云,如果你知道了,跳过这一段,不知道,读一下呗:: K/ O* Y1 k/ ~; P5 O* b2 m

. O6 N; ]0 k5 U5 s# l7 m) ~Unix系统里,每行结尾只有“<换行>”,即“\n”;Windows系统里面,每行结尾是“<换行><回 车>”,即“\n\r”。一个直接后果是,Unix系统下的文件在Windows里打开的话,所有文字会变成一行;而Windows里的文件在Unix下打开的话,在每行的结尾可能会多出一个^M符号。) ~2 Q. o' K1 ?  B$ }4 n

, l. M$ j+ p/ }2 |2 G) K好了,所以我的问题就出在被处理的文件的每行末尾都有^M符号,而这通常是看不出来的。可以用"cat -A test.file"命令查看。因此当我想在行尾添加字符的时候,它总是添加在行首且会覆盖掉原来行首的字符。
$ |/ G8 ]& Q! q% S2 B6 p8 S, c* F" Y: F
要把文件转换一下,有两种方法:" u  ~9 r2 ^+ q- ?9 O2 _
1.命令dos2unix test.file6 ~, d" H9 D0 ^7 H% y: ~; l
2.去掉"\r" ,用命令sed -i 's/\r//' test.file
您需要登录后才可以回帖 登录 | 开始注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

北京云银创陇科技有限公司以云计算运维,代码开发

QQ|返回首页|Archiver|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )点击这里给我发消息

GMT+8, 2026-4-8 21:40 , Processed in 0.048273 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

© 2012-2025 Discuz! Team.

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