我必须通过存储为变量的2个文件并删除包含存储在另一个变量中的字符串的行:
file1="./file1"
file2="./file2"
text="searched text"
for i in $file1,$file2; do
sed -i.txt '/$text/d' $i
done
与脚本位于同一文件夹中的文件。 我得到“没有这样的文件或目录”。我在过去的3个小时里一直被困在这里,说实话,我几乎要退出Linux了。
答案 0 :(得分:1)
您的脚本中有几个问题。正确的方法是:
file1="./file1"
file2="./file2"
text="searched text"
for i in "$file1" "$file2"; do
sed -i.txt "/$text/d" "$i"
done
的问题:
for
期望以空格分隔的参数列表,而不是逗号分隔您可以按照Charles的建议通过shellcheck和调试模式(bash -x script
)来解决这些问题。
答案 1 :(得分:0)
很抱歉,您的shell脚本设计不合适。在shell脚本中,多个文件不应存储在多个变量中。假设你需要对100个不同的文件进行相同的操作,你会做什么?所以请遵循以下代码风格。将所有文件名放在一个文件中,例如filelist.dat
,现在看: -
首先将所有文件名放在filelist.dat
中并保存
text="searched text"
while read file; do
sed -i.txt '/$text/d' $i
done < filelist.dat
还不确定sed
命令是否会起作用。如果不工作,请按以下方式进行: -
sed -i.txt 's|'"$text"'|d' $i