如何在shell脚本中查找和替换文本

时间:2013-10-01 12:44:17

标签: bash shell

我是shell脚本的新bie,在这里我试图找到文本并使用shell脚本替换文本。

我想要做的是,实际上我有一个文本文件,其中有2个字符串用“: “

喜欢这个

lorem:ipsum
dola:meru
etc....

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

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

例如

文本文件包含这样的数据

lorem:ipsum
dola:meru
caby:cemu

我正在使用2个参数运行我的脚本

./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

3 个答案:

答案 0 :(得分: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 :(得分:1)

在你的剧本中尝试这一行:

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

答案 2 :(得分:1)

你也可以试试这个,

输入文件:new.txt

lorem:ipsum
dola:meru
caby:cemu

脚本文件:script.sh

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

如果您按照自己的意愿运行脚本“./script.sh lorum meru”

输出:new.txt,将显示为

lorem:meru
dola:meru
caby:cemu

<强>说明: sed是一个功能强大的文本处理工具,您可以根据需要使用它提供的选项操作文本。

代码简要说明 sed -i&gt;用于用新的更改替换原始文件的内容(如果你不在sed中给它-i它只会打印修改后的内容而不影响原始文件)

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

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