Как я удаляю согласующий отрезок длинной линии, строку выше и тот ниже ее, с помощью sed?

Вам не нужно проходить через cmd.exe. Сам интерпретатор Python является исполняемым; другими словами, он может быть запущен и выполнен напрямую. Аргументы для интерпретатора Python (например, путь + имя сценария, который должен быть выполнен) и требуемый рабочий каталог могут быть установлены через соответствующие свойства Process.StartInfo :

Process process = new Process();
process.StartInfo.FileName = "python.exe";
process.StartInfo.Arguments = "Python_Code.py";
process.StartInfo.WorkingDirectory = @"F:\Path";
process.StartInfo.CreateNoWindow = true;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.UseShellExecute = false;
process.Start();

Сейчас вам нужно только дождаться завершения интерпретатора Python (что означает, что он завершил выполнение скрипта python)

process.WaitForExit();

, и после завершения процесса Python просто проверьте, существует ли файл json / написано:

if (System.IO.File.Exists(pathToJsonFile))
{
    ... do stuff with json file ...
}
else
{
    ... json file does not exist, something went wrong...
}

Примечание: я сохранил здесь process.StartInfo.RedirectStandardOutput = true; в своем примере кода, так как я не знаю, что ваша программа действительно сделает. Однако, если ваша программа не хочет обрабатывать вывод сценария, который обычно появляется в окне консоли, установка RedirectStandardOutput в в значение true не требуется.

11
задан Ben Lever 18 May 2009 в 06:27
поделиться

4 ответа

Уловка заключается в том, чтобы сохранить последнюю строку, видимую в «удерживаемом пространстве».

sed -n '
/^xxxx/{n
        n
        x
        d
       }
x
1d
p
${x
  p
 }
' <input file>

Начиная с x - поменять местами текущую строку ввода с удерживаемым пространством ( x ), то для первой строки ничего не печатать ( 1d ), последующие строки печатают строку, только что замененную из удерживаемого пространства ( p ), в последней строке снова поменяйте местами удерживаемое пространство и напечатайте, что в нем было ( $ x {xp} . Остается, что делать, когда мы попадаем в целевую строку (начиная с / ^ xxxx / ]) - считайте следующие две строки в пространство шаблонов ( nn ) и поменяйте местами пространство шаблонов с пространством удержания ( x ) - это оставляет пространство удержания со следующей строкой, которую мы хотим для печати и пространство образца со строкой перед совпадением, что нам не нужно,поэтому мы бросаем его ( d )

13
ответ дан 3 December 2019 в 09:21
поделиться

This is how I would do it in perl maybe it can help send you on the right track... Good luck!

open(INFILE,"<in.txt");
my(@arrayOutBoundData, $skipNextLine)l
for (<INFILE>) {
    if (not $skipNextLine) {
        if (/^xxxx$/) {
            pop(@arrayOutBoundData);
            $skipNextLine = 1;
        } else {
            push(@arrayOutBoundData,$_);
        }
    }
$skipNextLine = 0
}

open(OUTFILE,">out.txt");
for (@arrayOutBoundData) {
    print OUTFILE;
}

(Not tested no perl on this system please forgive any over site.)

0
ответ дан 3 December 2019 в 09:21
поделиться

Вы можете проверить этот документ . Он описывает использование sed для работы с несколькими строками.

0
ответ дан 3 December 2019 в 09:21
поделиться
grep -v -f <(grep -1 "xxxx" file) file
-1
ответ дан 3 December 2019 в 09:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: