Используйте следующий подход:
grep -Po '(?<=\*B\*)[^*]+' tus.txt | sort -u
Вывод:
00081684
00081907
00082024
00082025
00082403
00082603
222791885833
2239681
262105589241-20172-31489016
36
4578873831221
Обратите внимание, sort -u
изменит порядок начального grep
вывода
Обратите внимание, что bash
не является sh
. export -f
относится к оболочке bash
.
Если скрипт не имеет -челки, он будет интерпретирован оболочкой, подобной POSIX -, которая может не быть bash. Если вы намерены использоватьbash
-определенные функции в своем скрипте, вы должны убедиться, что он имеет:
#! /path/to/bash -
она -удар или что вы вызываете его как bash path/to/the/script
. Кроме того, использование расширений .sh
для скриптов, написанных на языке bash
, немного вводит в заблуждение.
Теперь bash
является одной из тех немногих оболочек, которые способны экспортировать функции в среду (по сути, используя специальные переменные среды, понятные только командам bash
). Это можно сделать с помощью специальной команды export -f
bash -. bash
также экспортирует все функции, объявленные при включенной опции allexport
.
Но в любом случае ни то, ни другое не сработает в вашем случае. export
передача чего-либо из одной оболочки, будь то переменная или функция, заключается в том, чтобы эта переменная/функция была доступна в других оболочках, выполняемых этой оболочкой(экспорт заключается в сохранении вещей при выполнении)].
Таким образом, даже если myfile1.sh
или myfile2.sh
экспортируют функции, которые они объявили (с помощью export -f
или имея set -o allexport
перед объявлением переменной ), это повлияет только на те оболочки, которые оболочка интерпретация этих сценариев будет выполняться. Здесь myfile2.sh
не выполняет myfile3.sh
, все наоборот.
Здесь вам понадобится ваш myfile3.sh
скрипт для выполнения:
source path/to/myfile2.sh
, чтобы одна и та же оболочка интерпретировала код во всех сценариях myfile1.sh
, myfile2.sh
и myfile3.sh
, и тогда вам не нужно было бы экспортировать какую-либо функцию.
Обратите внимание, что в системах, где sh
равно bash
, вероятно, не стоит экспортировать функции, так как это влияет на все сценарии sh и bash и командные строки оболочки, которые ваш сценарий выполняет (рекурсивно ). Например,если бы ты сделал:
set -o allexport
uname() { echo Gotcha; }
somecmd
И somecmd
выполнял popen("uname", "r")
для получения имени unix, он получал Gotcha
в системах, где sh
— это bash
вместо реального имени системы (Darwin
, Linux
... ).