Json - это текст, он не сортируется.
Json нужно преобразовать в объект (модель данных). Но и там сортировать можно только списки, а у вас не списки.
Смотрите всякие SimpleJson, Newtonsoft и прочие.
using System.Linq;
var list = new List<int>() { 1, 5, 5, 4, 7, 5 };
var gr = list.GroupBy(e => e);
foreach (var line in gr)
{
Console.WriteLine("{0} => {1}", line.Key, line.Count());
}
Вам нужен не Replace, InfexOf. Находите все вхождения искомого текста, решаете которую вам нужно заменить и клеити новую строку как: до_искомого_текста + замена + после_искомого_текста.
И вы читаете все 600Мб в память.
Ну и в многопотоке это будет работать только с блокировкой файла на время перезаписи. При таком размере это выльется в существенный лаг. На вашем месте я бы пересмотрел концепцию.
А так: ищите первый символ конца строки, запоминаете позицию. Зачет читаете кусок после неё и записываете в начало файла, читаете дальше и дописываете после первого блока и так до конца. В конце уже обрезаете размер файла под новый размер.