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

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

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2020-3-25 18:28:05 | 显示全部楼层 |阅读模式
sed -i '/s/$/\'/g' 文本
0 g/ w2 S: }8 x" D" G" }5 g5 a  N% e* `
在文本的行末添加一个字符:' n; W1 R; w: Z# E& ~1 L0 E
例子:9 k# M! s% Z+ [' h4 w3 B5 p0 {
sed -i "s/$/'/g" nv.txt
4 Q5 \, M' O4 f3 ?0 [4 j) ^& x在行首添加字符 '单引号字符串:
+ i4 i" L5 Y, W" ]3 s$ w:%s/^/'/g' Y5 P; R2 r. M- B
例子:5 ]8 x# [" Q7 q
sed -i "s/^/'/g" nv.txt   - e9 R/ _  u* ]3 z- [+ V
( f' c* a0 L3 f, [5 T
配合sed命令:
" ~" ?8 P) |$ i; r: r  N6 @! {http://www.bbs168x.cn/forum.php?mod=viewthread&tid=805&highlight=sed
& L% D+ ]6 i6 L4 Hhttp://www.bbs168x.cn/forum.php?mod=viewthread&tid=199&highlight=sed
) q& x) q$ A! f% S% fhttp://www.bbs168x.cn/forum.php?mod=viewthread&tid=130&highlight=sed
4 g( @) {% k$ Q2 R; w# A: O2 V, j: M! U. Z1 l# g8 _
http://www.bbs168x.cn/forum.php?mod=viewthread&tid=325&highlight=sed
+ I* T4 a0 ?0 U1 hhttp://www.bbs168x.cn/forum.php?mod=viewthread&tid=606&highlight=sed" x% X4 j" S8 w/ s5 Y

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2020-3-25 18:30:55 | 显示全部楼层
sed -i 的使用方法,可以参考官方文档。* r" q2 s9 q" R6 y, i8 g5 r1 b

( g# }  u1 _0 m- a; G$ \, d另外sed 的使用方法:8 R7 ?( }* \; l9 j* n6 T1 ]
在每行的行尾添加字符,比如“TAIL”,命令如下:% q3 I. s% W. S. ]; F
sed 's/$/&TAI/g' test.file
. J( D2 b4 E  h  Q运行结果如下图:
- E1 H3 k1 A9 V* x# `6 f" m% Z$ _* }5 k
sed 's/$/&TAI/g' nfv.txt
, g+ k3 M3 I2 r''$172.21.78.7'TAI& l/ P5 ^- k2 W% w% E: j
''$172.21.78.4'TAI0 z6 }% i) n- ?3 T- M
''$172.21.78.1'TAI

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2020-3-25 18:31:35 | 显示全部楼层
要把文件转换一下,有两种方法:& u0 n# k; P. i
1.命令dos2unix test.file
( _+ \5 T* K# j5 p* `2.去掉"\r" ,用命令sed -i 's/\r//' test.file6 d4 V2 w& Q: [

0 F5 S; g6 ~) G8 t+ p4 k

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2020-3-25 18:32:01 | 显示全部楼层
也可以把两条命令和在一起,在test.file的每一行的行头和行尾分别添加字符"HEAD"、“TAIL”,命令:sed '/./{s/^/HEAD&/;s/$/&TAIL/}' test.file/ U2 B, U3 O) L) g1 B! x
以上其实都还OK,昨天花太多时间,主要因为被处理的文件是用Mysql从数据库提取的结果导出来的,别人给我之后我就直接处理,太脑残了= -我一直有点怀疑之所以结果不对,有可能是windows和linux换行的问题,可是因为对sed不熟,就一直在搞sed。。。。。。。" @4 {  g& u, F3 C2 q
8 x! `0 }- Z( A1 g3 S5 d
众所周知(= -),window和linux的回车换行之云云,如果你知道了,跳过这一段,不知道,读一下呗:
7 s) Q+ S  n8 k! ]+ F# M
8 g. B8 _- r* x1 ?3 kUnix系统里,每行结尾只有“<换行>”,即“\n”;Windows系统里面,每行结尾是“<换行><回 车>”,即“\n\r”。一个直接后果是,Unix系统下的文件在Windows里打开的话,所有文字会变成一行;而Windows里的文件在Unix下打开的话,在每行的结尾可能会多出一个^M符号。
, w7 ~2 L, H  x) d  p( Y6 v) V9 {$ e. S& M8 }* _$ c; i5 s
好了,所以我的问题就出在被处理的文件的每行末尾都有^M符号,而这通常是看不出来的。可以用"cat -A test.file"命令查看。因此当我想在行尾添加字符的时候,它总是添加在行首且会覆盖掉原来行首的字符。: R$ o$ d3 c" Z, c8 k

, S) t  P4 ^8 ?  n0 z要把文件转换一下,有两种方法:7 k% S0 d) U5 w
1.命令dos2unix test.file' U0 I0 z" V1 _5 O8 m7 B
2.去掉"\r" ,用命令sed -i 's/\r//' test.file
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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