En los sistemas que usan el conjunto de compiladores GCC, el compilador C++ esg++
(cpp
es el preprocesador C ).
Un nombre común para encontrar un compilador de C++ es c++
. Suele ser un enlace simbólico a un compilador de C++ apropiado como g++
o clang++
o cualquiera que sea el compilador del sistema instalado (si está instalado ).
El mensaje de error del script configure
indica que no hay un compilador de C++ instalado en su sistema. En su Linux, el compilador de C++ se instala por separado del compilador de C.
Para instalar el compilador GCC C++ en CentOS:
yum install gcc-c++
Если предположить, что
final_model=</dir1/dir2/dir3/user/dir4/test_F00ME001.inp>
— это строка текста, которую выдает ваша команда grep
,
grep... | sed 's#.*/##; s/>$//' | tee output1 |
sed 's/^[^_]*_//; s/\..*//' >output2
Это позволит сохранить две измененные строки в output1
и output2
Тестирование:
$ printf '%s\n' 'final_model=</dir1/dir2/dir3/user/dir4/test_F00ME001.inp>' |
sed 's#.*/##; s/>$//' | tee output1 |
sed 's/^[^_]*_//; s/\..*//' >output2
$ cat output1
test_F00ME001.inp
$ cat output2
F00ME001
Первый вызов sed
работает с исходными данными и сначала удаляет все до последнего символа /
включительно. Затем он удаляет >
в конце.
tee
сохраняет это в output1
и также передает на следующий этап конвейера.
Второй вызов sed
работает с измененными данными и сначала удаляет все до первого символа _
включительно. Затем он удаляет все, начиная с первой точки, и перенаправляет результат в output2
.
$ final_model="</dir1/dir2/dir3/user/dir4/test_F00ME001.inp>"
$ o1=$(echo "$final_model" | sed -e 's/<\(.*\)>/\1/') #remove <>
$ o1=$(basename "$o1") #get basename (test_F00ME001.inp)
$ echo "$o1"
test_F00ME001.inp
$ o2=$(echo "$o1" | sed -e 's/test_\(.*\)\.inp/\1/') #get text between test_ and.inp
$ echo "$o2"
F00ME001
В следующий раз попробуйте больше использовать Google, вы можете найти ответы на обе команды где-нибудь.
sed
источник команды:https://stackoverflow.com/a/13242517/7351855
Пытался добиться того же с помощью приведенных ниже команд
final_model=</dir1/dir2/dir3/user/dir4/test_F00ME001.inp>
o1=`echo $final_model| awk -F "/" '{print $NF}'|sed "s/[^[a-zA-Z_0-9.]//g"`
echo $o1
o2=`echo $o1|awk -F [_.] '{print $2}'`
echo $o2
F00ME001
замените grep -i final_model
на perl, и вы получите нужные вам данные:
$ perl -nE '/^final_model=.*\/(test_([^.]+)[^>]+)/ && say "$1\n$2"' assemble.preprocessing
test_F00ME001.inp
F00ME001
Первый набор захватывающих скобок захватывает материал после последней косой черты:(test_([^.]+)[^>]+)
Второй набор захватывает материал между подчеркиванием и точкой.
Затем вы можете записать две строки в переменные с помощью этой конструкции:
{ read output1; read output2; } < <(
perl -nE '/^final_model=.*\/(test_([^.]+)[^>]+)/ && say "$1\n$2"' assemble.preprocessing
)
Мы перенаправляем Подстановку процесса в группу из 2 команд чтения.
$ echo "$output1"
test_F00ME001.inp
$ echo "$output2"
F00ME001