file=/the/file.txt
while IFS= read -r string; do
grep -Fe "$string" < "$file" | grep -qvxFe "$string" &&
printf '%s\n' "$string"
done < "$file"
Isso executa um read
, dois grep
e algumas vezes um printf
de comandos por linha do arquivo, portanto não será muito eficiente.
Você pode fazer a coisa toda em uma invocação de awk
:
awk '{l[NR]=$0}
END {
for (i=1; i<=NR; i++)
for (j=1; j<=NR; j++)
if (j!=i && index(l[j], l[i])) {
print l[i]
break
}
}' < "$file"
embora isso signifique que o arquivo inteiro está armazenado na memória.