![如何从文件中删除特定文本](https://linux22.com/image/1187901/%E5%A6%82%E4%BD%95%E4%BB%8E%E6%96%87%E4%BB%B6%E4%B8%AD%E5%88%A0%E9%99%A4%E7%89%B9%E5%AE%9A%E6%96%87%E6%9C%AC.png)
我目前正在编写一个 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
这将生成一个新文件outfile
,infile
其中变量中包含的任何文本均被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