Я извлекаю строковые данные из двоичного файла, после чего я передаю данные в grep, чтобы отделить только те части, которые имеют расширенный ASCII в них. Чтобы проверить, что это на самом деле, я передаю вывод grep по трубе в xxd. Мне было бы удобно вызывать xxd один раз в строке. Но как только я передаю данные в xxd через xargs, он обрабатывает входную строку как имя файла, которого, конечно, не существует.
someprocess.sh somebinaryfile.bin | grep -P '[\x80-\xFF]' | xxd
Это работает, но имеет один большой двоичный объект из всех строк (я полагаю, строки). Я не совсем счастлив, так как мне приходится вручную искать каждую строку.
someprocess.sh somebinaryfile.bin | grep -P '[\x80-\xFF]' | xargs -n1 xxd
Это дает No such file or directory
для каждой строки. Если задать для xargs параметр -0, то только один оператор многострочного имени файла не будет найден.
someprocess.sh somebinaryfile.bin | grep -P '[\x80-\xFF]' | xargs -I{} xxd {}
То же самое здесь.
someprocess.sh somebinaryfile.bin | grep -P '[\x80-\xFF]' | xargs -I{} xxd <<<{}
Здесь я пытаюсь передать аргумент в виде файла, но это ничего не выводит и не сообщает об ошибках.
Я не уверен, что у меня есть какое-то недопонимание в обработке данных канала или это что-то особенное с xxd.
Возможно ли вызвать xxd для каждая строка отдельно и не думаете, что это имя файла дано ей?