文本替换

sh/bash/dash/ksh/zsh等Shell脚本
回复
mad_frog
帖子: 55
注册时间: 2011-06-29 11:26

文本替换

#1

帖子 mad_frog » 2011-06-29 11:33

大家好,我有一个文本文件file1.txt内容为:
Bishop/fhsalfhsl
Bishop/KFXBishop
Bishop/test1
Relay/test1
Relay/test2
Server/Maps/DF-ShuangShiZhenChengLou.ut2
Server/Maps/YL_KeYanSuo.ut2
Server/Maps/DF-ZhanShuXiaoWu.ut2
Realmz2/krealmlib.so
Realmz2/lottery.csv
Realmz2/UsePro.csv
想实现效果 ,并保存到file2.txt中
/home/A/fhsalfhsl
/home/A/KFXBishop
/home/A/test1
/home/A/test1
/home/A/test2
/home/A/Server/Maps/DF-ShuangShiZhenChengLou.ut2
/home/A/Server/Maps/YL_KeYanSuo.ut2
/home/A/Server/Maps/DF-ZhanShuXiaoWu.ut2
/home/A/Realmz2/krealmlib.so
/home/A/Realmz2/lottery.csv
/home/A/Realmz2/UsePro.csv
原文远不止这些内容,大家有什么好的实现方法,谢谢大家了!!
lubcat
帖子: 2061
注册时间: 2010-09-27 12:59

Re: 文本替换

#2

帖子 lubcat » 2011-06-29 11:36

哦。看差了。
听lx的~~
上次由 lubcat 在 2011-06-29 11:40,总共编辑 1 次。
生活里,有很多转瞬即逝,像在车站的告别,刚刚还相互拥抱,转眼已各自天涯。很多时候,你不懂,我也不懂,就这样,说着说着就变了,听着听着就倦了,看着看着就厌了,跟着跟着就慢了,走着走着就散了,爱着爱着就淡了,想着想着就算了。
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: 文本替换

#3

帖子 eexpress » 2011-06-29 11:37

● cat tmp |sed -e 's/^Bishop/\/home\/A/g' -e 's/^Relay/\/home\/A/g' -e 's/^Server/\/home\/\A\/Server/g' -e 's/^Realmz2/\/home\/A\/Realmz2/g'
没细化的。简单实现。
● 鸣学
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: 文本替换

#4

帖子 eexpress » 2011-06-29 11:38

● cat tmp |sed -e 's/^Bishop/\/home\/A/g' -e 's/^Relay/\/home\/A/g' -e 's/^\(Server\|Realmz2\)/\/home\/\A\/\1/g'
● 鸣学
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: 文本替换

#5

帖子 eexpress » 2011-06-29 11:39

● cat tmp |sed -e 's/^\(Bishop\|Relay\)/\/home\/A/g' -e 's/^\(Server\|Realmz2\)/\/home\/\A\/\1/g'
● 鸣学
mad_frog
帖子: 55
注册时间: 2011-06-29 11:26

Re: 文本替换

#6

帖子 mad_frog » 2011-06-29 11:41

能给判断吗,要是我前面的两种情况有很多呢,那不得写疯了
fnan
帖子: 919
注册时间: 2009-07-01 22:04

Re: 文本替换

#7

帖子 fnan » 2011-06-30 11:19

sed -e 's#^(Bishop/|Relay/)##' -e 's#^#/home/A/#' file1.txt > file2.txt
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
sk1418
帖子: 229
注册时间: 2007-07-01 17:36
系统: (En):System
来自: (En):address
联系:

Re: 文本替换

#8

帖子 sk1418 » 2011-06-30 22:36

awk的

代码: 全选

awk -F'/' 'BEGIN{h="/home/A"; OFS="/"} {$1=$1~/^(B|Rel)/?h:h"/"$1; print $0}' file1.txt
要是你前面两种情况非常。把那些情况放另一个文件里,awk多读一个文件判断一下就行了
---
regards,

Kent
头像
link_01
帖子: 1024
注册时间: 2008-11-05 13:24

Re: 文本替换

#9

帖子 link_01 » 2011-07-09 11:17

代码: 全选

sed -r '/^Server|Realmz2/s#^#/home/A/#; s#^\w+#/home/A#' tmp.txt
就是不知道大量文本时有没有匹配错误的
笔记
-------------------------------------
http://blog.163.com/wqt_1101
回复