Linux 如何查找和删除字符串中的多个子字符串
我的意见如下 输入文件名:a.txt --一些评论 从tb.Test中删除,其中id='abxd1' 从tb1.Test中删除,其中id='abxd2' --一些评论 从tb1.Table1中删除,其中id='abxd3' 预期输出文件:b.txt --一些评论 从id为'abxd1'的测试中删除 从测试中删除,其中id='abxd2' --一些评论 从表1中删除,其中id='abxd2' 以下代码将仅替换值“tb”。我试图把它作为一个通用脚本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
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
(我已经相应地更新了上面的答案)