将设为首页浏览此站
开启辅助访问 天气与日历 收藏本站联系我们切换到窄版

易陆发现论坛

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

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

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

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

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

x
sed -i '/s/$/\'/g' 文本4 G: [# H1 F  B9 R: z/ ^& T1 {

2 {" t( k6 t$ ^0 } 在文本的行末添加一个字符:$ z2 _- |8 Z& l" w! j; E
例子:/ \) Z$ M" k" _* w5 m( H
sed -i "s/$/'/g" nv.txt
6 O2 Z/ q: g# R1 F8 x4 r& U  N在行首添加字符 '单引号字符串:
2 A" B8 h  k0 [' r5 i" R  o7 E:%s/^/'/g
) _0 {$ A/ [: ]8 E. d* @2 `例子:
) Y+ t1 \4 h: R3 ^7 ssed -i "s/^/'/g" nv.txt   ( r7 z4 m* O# e) v" S* z
. Y+ v. k8 I' T7 v3 p% y, Y
配合sed命令:3 d3 b) K9 a4 X
http://www.bbs168x.cn/forum.php?mod=viewthread&tid=805&highlight=sed
/ d' F: I  g9 ?% E# W2 O, Shttp://www.bbs168x.cn/forum.php?mod=viewthread&tid=199&highlight=sed
6 R6 W1 [& b8 K/ ~3 m5 Nhttp://www.bbs168x.cn/forum.php?mod=viewthread&tid=130&highlight=sed2 X8 H7 O# z, g

9 K% ]- C# L' |$ V+ f" u) u$ chttp://www.bbs168x.cn/forum.php?mod=viewthread&tid=325&highlight=sed# j+ @1 N3 b. @9 t& g& A
http://www.bbs168x.cn/forum.php?mod=viewthread&tid=606&highlight=sed( J3 ~5 J. V( b% U0 H  {
 楼主| 发表于 2020-3-25 18:30:55 | 显示全部楼层
sed -i 的使用方法,可以参考官方文档。8 X& `9 R1 I4 C1 j* M2 h
* d! X1 C% z, o* L4 A& M9 C
另外sed 的使用方法:4 z! `+ g. A9 s5 @6 E0 B
在每行的行尾添加字符,比如“TAIL”,命令如下:! L6 m" E2 c* ]2 }7 y/ W
sed 's/$/&TAI/g' test.file
- w  w1 O& g6 v3 `1 S$ E4 k6 I运行结果如下图:
: r+ I7 ~! \8 R
2 ]& l" X' c, ?! m3 @3 d" l( k# Dsed 's/$/&TAI/g' nfv.txt
& X: Q8 p0 i3 V8 p' C''$172.21.78.7'TAI8 J0 Q* i% d& v) ^8 _
''$172.21.78.4'TAI( f: q9 Z) i$ F7 U1 i. s+ T
''$172.21.78.1'TAI
 楼主| 发表于 2020-3-25 18:31:35 | 显示全部楼层
要把文件转换一下,有两种方法:
, y& y" K8 n  w1.命令dos2unix test.file' L& M) W" E1 ~- Z' P
2.去掉"\r" ,用命令sed -i 's/\r//' test.file; M4 K9 a! D+ z( X# t

% l) I( J8 f% \1 t7 D! X* d4 M' m
 楼主| 发表于 2020-3-25 18:32:01 | 显示全部楼层
也可以把两条命令和在一起,在test.file的每一行的行头和行尾分别添加字符"HEAD"、“TAIL”,命令:sed '/./{s/^/HEAD&/;s/$/&TAIL/}' test.file5 j# p9 U( G! Q1 Q
以上其实都还OK,昨天花太多时间,主要因为被处理的文件是用Mysql从数据库提取的结果导出来的,别人给我之后我就直接处理,太脑残了= -我一直有点怀疑之所以结果不对,有可能是windows和linux换行的问题,可是因为对sed不熟,就一直在搞sed。。。。。。。: b+ t# R) L  i7 j  |
9 Z+ k# f7 k3 ~3 y- B
众所周知(= -),window和linux的回车换行之云云,如果你知道了,跳过这一段,不知道,读一下呗:
' g4 y: V/ n: V/ D0 g% j/ t
7 T# V- E: X3 o% U; YUnix系统里,每行结尾只有“<换行>”,即“\n”;Windows系统里面,每行结尾是“<换行><回 车>”,即“\n\r”。一个直接后果是,Unix系统下的文件在Windows里打开的话,所有文字会变成一行;而Windows里的文件在Unix下打开的话,在每行的结尾可能会多出一个^M符号。+ C1 j% ~' }! h
1 {0 U- o% d! B- S5 J8 N* R( R2 @
好了,所以我的问题就出在被处理的文件的每行末尾都有^M符号,而这通常是看不出来的。可以用"cat -A test.file"命令查看。因此当我想在行尾添加字符的时候,它总是添加在行首且会覆盖掉原来行首的字符。! ?) C5 p4 J/ a- x

3 v8 X: K$ C+ s& \1 s& K/ m' N4 F要把文件转换一下,有两种方法:" K  U+ n3 d& U9 X. n
1.命令dos2unix test.file
' q( Z2 e- A# [2.去掉"\r" ,用命令sed -i 's/\r//' test.file
您需要登录后才可以回帖 登录 | 开始注册

本版积分规则

关闭

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

如有购买积分卡请联系497906712

QQ|返回首页|Archiver|手机版|小黑屋|易陆发现 点击这里给我发消息

GMT+8, 2020-7-8 02:45 , Processed in 0.061639 second(s), 25 queries .

Powered by 龙睿 bbs168x X3.2

© 2001-2020 Comsenz Inc.

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