O Grep tem duas boas opções, -A (depois) e -B (antes), então:
tr , '\n' < database.sql | grep -ne -A3 -B3 'str'
retornaria a linha contendo a string que você pesquisou, mais as três linhas acima dela e as três linhas abaixo dela.
Gostaria de responder a pergunta inteira, mas infelizmente não entendo o que você está tentando fazer.
Para cortar a string, você pode usar o comando cut
e / ou awk
O AWK é mais complexo, mas um uso simples seria awk {'print $1'}
então:
tr , '\n' < database.sql | grep -ne -A3 -B3 'str' | awk {'print $1'}
imprimiria o primeiro arquivado no resultado, onde o campo é qualquer coisa para o primeiro espaço em branco.
e da mesma forma com corte:
tr , '\n' < database.sql | grep -ne -A3 -B3 'str' | cut -f1 -d" "
apenas desta vez -d especifica o delimitador entre campos como espaço em branco. Pode ser o que você quiser, mas apenas um personagem. então -f = campo, -d = delimitador.
Espero que isso ajude