фильтр игнорирует строки в большом текстовом файле

Другие ответы хороши для ответа на вопрос вместо приведенных примеров. Мое приложение в реальном -мире более сложное и включает ряд сценариев и подпроцессов -. Вот упрощённый -пример сценария, который я хочу выполнить:

#!/bin/bash
sub-process-that-fails
# store and echo returncode for debug purposes
rc=$?
echo $rc
exit $rc

Пытаясь убедиться, что удаленная оболочка на самом деле была bash, а не dash (, как указал @JeffSchaller ), я попытался вызвать скрипт следующим образом:

~$ ssh -t -t host /bin/bash -x /srv/scripts/run.sh ; echo $?

Что привело к этому странному результату:

+ sub-process-that-fails
+ rc=5
+ echo 5
5
+ exit 5
0

После нескольких часов ковыряния я заметил trap 'kill 0' EXITнабор в .bashrc. Это делается для уничтожения всех подпроцессов -в случае, если bash будет уничтожен. трассировка bash, похоже, не отображает выполнение этой ловушки. Я переместил ловушку в скрипт-оболочку. Теперь я вижу, что на самом деле выполняется:

+ trap 'kill 0' EXIT
+ sub-process-that-fails
+ rc=5
5
+ echo 5
+ exit 5
+ kill 0
0

Удаленная оболочка завершает работу с кодом выхода последней команды. Это kill 0и он завершается с 0.

0
08.03.2021, 05:35
1 ответ

Думаю, мой вопрос был слишком расплывчатым, я погуглил и обнаружил, что это можно сделать так:

grep -vf ignore.txt input.txt > output.txt

ignore.txt:

test/
tests/
_test.
/node_modules/

input.txtбыл сгенерирован find, каждая строка — это путь к файлу, он очень большой

output.txtимеет тот же формат/содержимое, что и input.txt, с удаленными путями в шаблонах ignore.txt

1
18.03.2021, 22:27

Теги

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