我是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
答案 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 /”。 这里*指定“:”之后出现的任何内容 因此,通过执行此操作,您将获得所需的输出。