如何从文件中删除特定文本

如何从文件中删除特定文本

我目前正在编写一个 bash 脚本,我希望这个 bash 脚本向用户询问特定的文本,如果文件中存在该文本,则脚本将删除该文本。

代码;

if [ ! -d /home/fixscript/AudioBot ]
then
echo -e "AudioBot yüklü değil!"
sleep 0.5
echo -e "Ana menüye yönlendiriliyorsunuz..."
else
echo -e "Hangi ID silinsin?"

read Cevap50
// if $Cevap50 exists in $file, then delete it.
fi

文件;

//This is a config file
groupid = [ 625, 823, 824, 618 ] //If the user answer is 824, the script will only delete "824," from the file.
useruid = []

答案1

最简单的方法是:

sed "s/$Cevap50//g" <infile >outfile

这将生成一个新文件outfileinfile其中变量中包含的任何文本均被Cevap50删除。

总体而言,此处要删除的文本被解释为正则表达式,因此您应避免在本文中使用以下字符:^ . [ ] $ ( ) \ * + { } ?因为它们在正则表达式中具有特殊含义。您也不应该使用/,因为 - 如您所见 - 它在命令中用作分隔符。如果您只使用数字或字母,则没有问题。

但请注意,如果用户回答824,则脚本将删除确实 824来自文件,因此输出文件将包含以下内容:

groupid = [ 625, 823, , 618 ] //If the user answer is , the script will only delete "," from the file.

删除824 下面的逗号,用户必须回答824,

当然可以修改为删除Cevap50 另可选加利用正则表达式的特性,可以替换下面的逗号。命令需要改为:

sed -r "s/${Cevap50},?//g" <infile >outfile

相关内容