Как вырезать во время Grepping [закрыто]

En los sistemas que usan el conjunto de compiladores GCC, el compilador C++ esg++(cppes 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 configureindica 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++
-3
31.01.2019, 16:33
4 ответа

Если предположить, что

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.

1
28.01.2020, 05:18
$ 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

1
28.01.2020, 05:18

Пытался добиться того же с помощью приведенных ниже команд

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
1
28.01.2020, 05:18

замените 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
0
28.01.2020, 05:18

Теги

Похожие вопросы