Я написал скрипт на R, который имеет несколько аргументов. Я хочу перебрать более 20 каталогов и выполнить каждый сценарий, передавая подстроку из пути к файлу в качестве аргумента -n, используя sed. Я запустил следующее:
find . -name 'xray_data' -exec sh -c 'Rscript /Users/Caitlin/Desktop/DeMMO_Pubs/DeMMO_NativeRock/DeMMO_NativeRock/R/scipts/dataStitchR.R -f {} -b "{}/SEM_images" -c "{}/../coordinates.txt" -z ".tif" -m ".tif" -a "Unknown|SEM|Os" -d "overview" -y "overview" --overview "overview.*tif" -p FALSE -n "`sed -e 's/.*DeMMO.*[/]\(.*\)_.*[/]xray_data/\1/' "{}"`"' sh {} \;
, что приводит к этой ошибке:
ubs/DeMMO_NativeRock/DeMMO_NativeRock/R/scipts/dataStitchR.R -f {} -b "{}/SEM_images" -c "{}/../coordinates.txt" -z ".tif" -m ".tif" -a "Unknown|SEM|Os" -d "overview" -y "overview" --overview "overview.*tif" -p FALSE -n "`sed -e 's/.*DeMMO.*[/]\(.*\)_.*[/]xray_data/\1/' "{}"`"' sh {} \;
sh: command substitution: line 0: syntax error near unexpected token `('
sh: command substitution: line 0: `sed -e s/.*DeMMO.*[/](.*)_.*[/]xray_data/1/ "./DeMMO1/D1T3rep_Dec2019_Ellison/xray_data"'
Когда я пытаюсь использовать sed с моим шаблоном в пути к файлу примера, он работает:
echo "./DeMMO1/D1T1exp_Dec2019_Poorman/xray_data" | sed -e 's/.*DeMMO.*[/]\(.*\)_.*[/]xray_data/\1/'
, которая производит правильную подстроку:
D1T1exp_Dec2019
Я думаю, что есть проблема с попыткой использовать одинарные кавычки внутри интерпретируемой строки, но я не знаю, как с этим справиться. Я попытался заменить одинарные кавычки вокруг шаблона sed двойными кавычками, а также удалить одинарные кавычки, оба приводят к этой ошибке:
sed: RE error: illegal byte sequence
Как мне динамически извлечь подстроку из пути к файлу в этом случай