Скорее всего, вы не сможете запустить его напрямую. Это двоичный файл, созданный для MacOS X, так что это то же самое, что пытаться запустить файлы Windows.exe в Linux.
Существуют способы использования двоичных файлов Mach -O, но это всегда эмулятор или что-то подобное (, например двоичные файлы Wine для Windows):https://github.com/shinh/maloaderилиhttp://www.darlinghq.org/
То же решение, на которое я ответил здесь , которое также применимо к вашему вопросу с небольшой модификацией здесь:
sed -E ':loop s/(\([^)]*),([^)]*\))/\1\2/; t loop' infile
Примечание:un -escaped (
или )
вне класса символов [...]
используется для группового сопоставления; экранированные \(
или \)
или внутри класса символов [...]
будут соответствовать литералам (
и )
; ^
соответствует отрицанию, поэтому [^)]
соответствует "любому одиночному символу, но не )
".
то имеем:
(\([^)]*)
:первый групповой матч, на который ссылается обратный референд \1
. ,
:соответствует одной запятой. ([^)]*\))
:совпадение второй группы, задняя -ссылка \2
.
Рассмотрим одну примерную строку, как показано ниже, и объясним, как работает это совпадение:
c(("4288", "57534", "somtoher")),d("f1", "f2", "f3"),MIB1
это (\([^)]*),([^)]*\))
будет соответствовать:
от самой первой открывающей скобки (
, за которой следует что угодно, кроме )
и вверх -до последней ,
до первой закрывающей скобки )
; таким образом, первое совпадение группы \1
будет соответствовать (("4288", "57534",
части строки выборки, приведенной выше;
затем все, что находится после последнего ,
до первой закрывающей скобки вверх -до первой закрывающей скобки и самого )
будет во втором групповом совпадении \2
; это будет "somtoher")
часть приведенной выше строки образца.
в замещающей части в \1\2
мы возвращаем обе совпадающие группы обратно, но опускаем запятую между ними.
:loop s///; t loop
; выполняйте шаги с 1 по 3 до тех пор, пока все запятые между (
и )
не будут очищены в цикле sed(loop
и не будут использоваться в качестве метки ).
с первой попытки,наша строка образца изменится на:
c(("4288", "57534" "somtoher")),d("f1", "f2", "f3"),MIB1
при второй попытке будет:
c(("4288" "57534" "somtoher")),d("f1", "f2", "f3"),MIB1
с третьей попытки будет:
c(("4288" "57534" "somtoher")),d("f1", "f2" "f3"),MIB1
и так далее.
Использование perl
вместо sed
для получения более сложных регулярных выражений:
perl -pe 's/(?:\G[^,)]*|\([^,)]*)\K,(?=.*?\))//g' input.csv
c("4288" "57534"),MIB1
c("2272" "2385"),FHIT
c("5550" "10531" "56239"),PREP
c("25809" "23669"),TTLL1
Это удалит все запятые внутри скобок.