变量存储文件执行sed删除操作时提示「无此文件或目录」求助
解决脚本执行「No such file or directory」问题的分步指南
兄弟我太懂这种卡到想放弃Linux的心情了!3小时耗在这种细节上确实糟心,咱们来一步步把问题拆解开,搞定它:
你的脚本里的3个关键错误
- 循环遍历的写法错误:你用
for i in $file1,$file2时,逗号会被shell当成文件名的一部分,它会尝试去查找./file1,./file2这个不存在的文件,自然报“找不到”的错误。正确的写法应该是用空格分隔两个文件名,并且给变量加双引号(避免文件名有空格时出问题)。 - sed的变量解析问题:单引号
''里的内容会被shell原样传递给sed,所以'/$text/d'里的$text不会被解析成你定义的"searched text",sed会去查找字面量$text。要改成双引号""让shell解析变量。 - 循环语法缺失分隔符:
$i后面没有加;或者换行,shell会把done当成命令的一部分,语法直接报错,这也会影响脚本执行。
修正后的完整脚本
file1="./file1" file2="./file2" text="searched text" for i in "$file1" "$file2"; do sed -i.txt "/$text/d" "$i" done
额外说明
sed -i.txt会给每个处理的文件生成一个.txt后缀的备份(比如file1.txt是原file1的备份),如果不需要备份,可以直接用sed -i "/$text/d" "$i",但建议保留备份防止误删重要内容。- 给变量和文件名加双引号是好习惯,能避免文件名含空格、特殊字符时出现意外问题。
内容的提问来源于stack exchange,提问作者Claudiu Tiganetea
相关产品推荐
相关产品推荐

