Это было просто плохое понимание использования cut и sed.
Небольшая настройка одного лайнера:
strings -f -e l *.exe | sed -e :a -e '/FileVersion$/N; s/FileVersion\n/FileVersion /; ta' | grep FileVersion | sed 's/.*FileVersion//'
Таким образом, строка использует -f для имени файла, -e для необходимой информации о файле.
sed используется для удаления и выхода Fileversion
Затем grep, чтобы найти эту информацию на экране
, затем последний sed для удаления Content перед Fileversion (это неправильный способ сделать это, я понимаю, что sed сложные шаблоны)
sed 's/.*FileVersion//'
Если кто-то хочет опубликовать правильное форматирование для sed, я с радостью обновлю это. К сожалению, шаблоны и понимание sed не совсем понятны.
ls
принимает входные данные не из стандартного ввода, а только из аргументов:
Попробуйтеls -l "$(which python3)"
ls
не читает из канала. На самом деле ls
вообще не использует свой стандартный ввод.
Вместо этого вам нужно передать то, что вы хотите запустить ls -l
через командную строкуls
:
ls -l "$( which python3 )"
При этом используется подстановка команды в командной строке ls -l
, которая будет расширена до вывода команды which
. Затем он будет использоваться в качестве аргумента командной строки для ls
.
В качестве альтернативы:
ls -l "$( command -v python3 )"
Связанные:
Другие ответы хороши, но это тоже удобно:
which python3 | xargs ls -l
xargs
получает значения из stdin
и добавляет их в качестве аргумента строки команды -к указанной программе.