file
www.file.com
www.file2.com
www.file3.com
test.sh
while true; do
read -p "Would you like to remove '${url##*/}' from the list? " yn
case $yn in
[Yy]* ) echo "Removing '${url##*/}' From File List";
sed -i '/[$url]/d' file; break;;
[Nn]* ) echo "Leaving '${url##*/}' From File List"; exit;;
* ) echo "Please answer yes or no.";;
esac
done
因此,在运行此脚本时,它应读取每行以删除或保留文件列表中的每一行,并在每行提示是或否的情况下,但在删除时,请删除右行/ URL。现在,我的脚本删除了文件列表中的所有行/ URL。
如果要添加到file2
中,则出现在file
中但不在file2
中的行,则可以使用comm
(通用)。此bash实用程序用于逐行比较两个排序的文件
使用comm -23
,可以识别出在第一文件中存在而在第二文件中不存在的行。
comm -23 <(sort file) <(sort file2) >> file2
这里,file
和file2
被排序并作为comm
的输入。然后,将file
中唯一存在的行写入file2
。
注意:
comm
仅适用于已排序的输入。
[当前,file2
中的每一行必须与file
中的当前行匹配,以防止将其写入file2
。基本上,您需要使用一个标记匹配行的标志来扩展file2
循环,如下所示:
while read lineA; do
found=false
while read lineB; do
if [[ ${lineA##*/} == ${lineB##*/} ]]; then
printf "${lineA##*/} and ${lineB##*/} match\n"
found=true
else
printf "${lineA##*/} and ${lineB##*/} don't match\n"
fi
done < file2
if [[ "$found" == "false" ]]; then
printf "$lineA\n" >> file2 # Add Line if Not in file2
fi
done < file