Você deve escapar de qualquer caractere especial vindo da sua linha de leitura. Por exemplo, se a linha $ contiver caracteres como / \ "{} ... sua expressão sed se desfaz.
Veja este post para algumas mágicas que escapam: link
Eu uso o comando abaixo para arquivos anteriormente e ele funciona perfeitamente mas agora ele gera erro abaixo ou avisa a saída desejada é uma lista de 82 nomes mas esse código dá 88 eu tento analisar o arquivo de saída 95% dos nomes são a / c para a saída desejada, mas os restantes poucos não são. (Este código é basicamente para encontrar o arquivo B [contém apenas nomes] no fileA [que contém nomes e seus ids]):
while read -r line; do sed -n "/$line/,/^C/p" fileA| sed '$d';done<fileB>fileC
sed: -e expression #1, char 16: extra characters after command
Você deve escapar de qualquer caractere especial vindo da sua linha de leitura. Por exemplo, se a linha $ contiver caracteres como / \ "{} ... sua expressão sed se desfaz.
Veja este post para algumas mágicas que escapam: link