Допустим, у вас есть путь с файлом в этом формате:
/dirA/dirB/dirC/filename.file
Теперь вы только хотите путь, который включает четыре "/". Тип
$ echo "/dirA/dirB/dirC/filename.file" | cut -f1-4 -d "/"
, и ваш выход будет
/ dirA / dirB / dirC
Преимущество использования разреза заключается в том, что вы также можете вырезать директорию uppest, а также файл (в этом примере), поэтому, если вы наберете
$ echo "/ dirA / dirB /dirC/filename.file "| cut -f1-3 -d "/"
ваш выход будет
/ dirA / dirB
Хотя вы можете сделать то же самое с другой стороны строки, в этом случае это не будет иметь особого смысла при вводе
$ echo "/dirA/dirB/dirC/filename.file" | cut -f2-4 -d "/"
приводит к
dirA / dirB / dirC
In в некоторых других случаях может оказаться полезным и последний случай. Имейте в виду, что в начале последнего вывода нет «/».
Ошибка вашего кода заключается в том, что вы используете неправильный тип match_results
. Предполагается, что smatch
используется, когда у вас есть объект std::string
, и вы передаете std::string::iterator
s функции regex
. Когда вы используете raw char const *
s, используйте cmatch
.
Измените
std::smatch what;
на
std::cmatch what;