Você pode fazer isso em duas etapas com awk like
awk '{$2="VAL";print}' input_file > temp_file
mv temp_file input_file
Isso dividirá o arquivo de entrada no espaço em branco, substituirá o valor na segunda coluna (use qualquer outro número diferente de 2 para coluna diferente), de modo que agora será "VAL". A menos que você o altere com OFS , o delimitador do campo de saída será um espaço. Se você quiser algo mais você pode adicionar, dentro das aspas, algo como 'BEGIN {OFS="\ t"} ...' para definir o separador de campo de saída para o que você quiser.
Se você quiser que os valores sejam algo diferente de uma constante, você terá um pouco mais de trabalho a fazer, mas poderá adaptá-lo para isso.
Para fazer esse trabalho para a edição no seu caso, você pode fazer:
awk -F\| 'BEGIN {OFS="|";} $2~/^Orange$/ {$2="Orange_edit";} {print}' abc.txt > temp_file
mv temp_file abc.txt
Primeiro, informa awk para dividir os campos com base em | passando -F\| . Em seguida, configuramos nossa saída para usar também | para o delimitador de saída (o padrão é espaço) fazendo o primeiro bloco de código (a parte que corresponde a BEGIN, uma palavra-chave em awk que corresponde ao início da execução) e definindo nosso OFS ou Separador do campo de saída. Como Otheus apontou, nós poderíamos fazer {OFS=FS} para definir o delimitador de saída para ser o mesmo que o de entrada.
Depois disso, começamos a olhar para as linhas. Comparamos o segundo campo, que é referenciado por $2 , e depois verificamos se ele corresponde a uma expressão regular usando ~ . Depois que ~ é a regex que queremos corresponder, ^ aqui significa corresponder ao início do campo, depois temos a string "Orange" e, em seguida, $ que corresponde ao final do campo. Como esta é uma string codificada em disco, Otheus também observou corretamente que poderíamos testar a igualdade de strings aqui e fazer $2=="Orange" e pular o processamento regex, já que ele não faz nada dessa vez. Se essa correspondência for bem sucedida no bloco de código em {} após a execução, o que salvará um novo valor no segundo campo.
Finalmente, executamos o último bloco de código {print} para cada linha, mas quando a nossa correspondência "Orange" foi bem-sucedida, alteramos o valor do segundo campo para que ele seja impresso com nosso novo valor em vez do antigo.
awk normalmente imprime na tela (aparentemente o mais novo gawk tem uma opção para simplificar essa parte), então salvamos isso em um arquivo e, em seguida, movemos esse arquivo de volta para o nome original.