2013-10-01 100 views
0

我是一个shell脚本的新手机,在这里我试图找到文本并使用shell脚本替换文本。如何查找和替换shell脚本中的文本

什么,我试图做的是,其实我已经有2个字符串分隔的文本文件“: ”

喜欢这个

lorem:ipsum 
dola:meru 
etc.... 

我的脚本运行时,将采取2个参数。 现在脚本应该检查是否找到第一个参数,如果没有找到它应该将其添加到文本文件。

如果找到第一个参数,那么它应该替换第二个参数。

例如

文本文件有这样的

lorem:ipsum 
dola:meru 
caby:cemu 

数据我运行我的脚本有两个参数是这样

./script.sh lorem meru 

所以,当我运行该脚本,它应该检查如果找到文件中的第一个参数,如果找到,脚本应该替换第二个字符串..

即 我跑这样

./script.sh lorem meru 

脚本,以便在文件

lorem:ipsum 
dola:meru 
caby:cemu 

运行该脚本后,在该行

lorem:ipsum 

应该得到更换,

lorem:meru 

这是我曾尝试..

#!/bin/sh 
# 
FILE_PATH=/home/script 
FILE_NAME=$FILE_PATH/new.txt 

echo $1 
echo $2 
if [] then  
else 
echo $1:$2 >> $FILE_NAME 
fi 

回答

1

尝试这条线在脚本:

awk -F: -v OFS=":" -v s="$1" -v r="$2" '$1==s{$2=r}7' file > newFile 
2

使用sed可能比较简单。

$ cat inputfile 
lorem:ipsum 
dola:meru 
caby:cemu 
$ pattern="lorem" 
$ word="meru" 
$ sed "/^$pattern:/ s/:.*/:$word/" inputfile 
lorem:meru 
dola:meru 
caby:cemu 
1

你可以试试这个为好,

输入文件:new.txt

lorem:ipsum 
dola:meru 
caby:cemu 

脚本文件:脚本。 sh

#!/bin/sh 
sed -i "s/$1:.*/$1:$2/" new.txt 

如果您运行脚本,因为您希望“./script.sh lorum meru”

输出:新。TXT,将显示为

lorem:meru 
dola:meru 
caby:cemu 

说明: sed的是一个强大的文本处理工具,在这里,你想用它提供的选项ü可以操纵的文本。

代码的简单说明, SED -i>用于替换为新的变化的原始文件的内容(如果u不要在sed将只打印修改的内容给-i不影响原文件)

“S /旧:* /旧:新/”

用于替代 “S”。语法是“s/old/new /'。 这里*指定在”:“之后出现的任何内容。 因此,通过执行此操作,您将获得所需的输出