0

我是 shell 脚本的新手,在这里我试图找到文本并使用 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
4

3 回答 3

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
于 2013-10-01T12:49:06.593 回答
1

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

 awk -F: -v OFS=":" -v s="$1" -v r="$2" '$1==s{$2=r}7' file > newFile
于 2013-10-01T12:51:36.347 回答
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 > 用于用新的更改替换原始文件的内容(如果你在 sed 中不给 -i 它只会打印修改的内容而不影响原始文件)

“s/旧:.*/旧:新/”

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

于 2015-03-12T07:21:08.647 回答