Linux 如何查找和删除字符串中的多个子字符串

Linux 如何查找和删除字符串中的多个子字符串,linux,string,bash,shell,Linux,String,Bash,Shell,我的意见如下 输入文件名:a.txt --一些评论 从tb.Test中删除,其中id='abxd1' 从tb1.Test中删除,其中id='abxd2' --一些评论 从tb1.Table1中删除,其中id='abxd3' 预期输出文件:b.txt --一些评论 从id为'abxd1'的测试中删除 从测试中删除,其中id='abxd2' --一些评论 从表1中删除,其中id='abxd2' 以下代码将仅替换值“tb”。我试图把它作为一个通用脚本 while read line do str

我的意见如下

输入文件名:a.txt

--一些评论

从tb.Test中删除,其中id='abxd1'

从tb1.Test中删除,其中id='abxd2'

--一些评论

从tb1.Table1中删除,其中id='abxd3'

预期输出文件:b.txt

--一些评论

从id为'abxd1'的测试中删除

从测试中删除,其中id='abxd2'

--一些评论

从表1中删除,其中id='abxd2'

以下代码将仅替换值“tb”。我试图把它作为一个通用脚本

while read line
do
   str=$line
   echo "${str/tb./}" >>b.txt
done <$1
读取行时
做
str=$line
echo“${str/tb./}”>>b.txt

完成您可以使用
sed

sed 's/delete from \(tb[0-9]\?\).\([[:alnum:]]\+\)/delete from \2/g' input.file
echo $str | sed -r 's/tb[a-z0-9_]*.//g'

您可以使用
sed

sed 's/delete from \(tb[0-9]\?\).\([[:alnum:]]\+\)/delete from \2/g' input.file
echo $str | sed -r 's/tb[a-z0-9_]*.//g'

HTH

假设您希望从X.Y中删除
X.
(点和点之前的所有内容),则更简单:

sed's/delete from.*\./delete from/'a.txt

您可以使用
-i
选项覆盖相同的文件

sed-i的/delete from.*\./delete from/'a.txt


嗯,Marcello

你对
子字符串
是什么意思?我想说的是需要删除的一些字符串,基本上是在上面的示例“tb.”,“tb1.”中“from”之后的任何内容。对不起,没有完全问这个问题。我不明白,我只能猜测。您需要进一步解释。如果我想删除“delete from”to.(DOT包括tb.tb1.或abc.)之后的任何内容,那么输出将从测试中删除..在这种情况下:
sed's/delete from.*\./delete from/'a.txt
(我已经相应地更新了上面的答案)