Use a opção -q para informar sftp a ser q uiet, suprimindo assim a maior parte da saída com a qual você não se importa:
echo "ls *.txt" | sftp -q [email protected]:/path
Você ainda verá as linhas do prompt interativo ao qual você está ecoando, e. g. sftp> ls *.txt , mas esses podem ser filtrados com um grep -v :
echo "ls *.txt" | sftp -q [email protected]:/path | grep -v '^sftp>'
Como um aparte, provavelmente é uma prática melhor usar um arquivo em lote e passá-lo com o parâmetro -b para sftp em vez de echo em um pipeline.
Se tudo que você realmente deseja fazer é obter uma lista de arquivos, isso pode ser mais bem servido com ssh do que com sftp (que, após tudo, é o s ecure f ile t ransfer p rograma):
ssh [email protected] ls -1 /path