Мне нужно заменить «незначительные» части имени. Это нужно сделать в сценарии bash. Для этого мне нужно удалить средние слова «VAN», «DEN», «DE» и «DER».
Чтобы сделать это, я использую встроенную программу замены (задача сводится к 2-х линий):
line="STIG VAN DE WYNKELE";
line=${line//@(' VAN '|' DEN '|' DE '|' DER ')/' '};
echo $line;
Выход:
STIG DE WYNKELE
Ожидаемый результат:
STIG WYNKELE
Кажется, что @ (...) соответствует одному из средних слов, удаляя все вхождения этого среднего слова, но оно не совпадает с RS.
Вопрос: Я делаю что-то не так в своем синтаксисе? Если нет, как бы удалить эти слова? sed требует файлов, а мой ввод - переменная, а измененный текст также должен храниться в переменной. (строка $ должна быть изменена)
'sed' не требует файлов, это потоковый редактор. 'foo = $ (echo" $ foo "| sed ...)' является общей идиомой. –
Обычный, но обычно не нужен, если '$ foo' короткий. – chepner