Остановить и отбросить несовпадающие токены в строке?

Несомненно, существует более короткий способ, но следующий не использует ничего, кроме указанных в POSIX утилит. для быстрой интерактивной проверки:

printf '0123456789\n1234567890\n' | sed '1s/./&&&&&&&&&&/g;1s/^.//;2s/.*/&&&&&&&&&&/'

Запустите команду и прочтите цифры, которые находятся справа на вашем дисплее. Прочтите это как двузначное число вниз; это говорит вам, сколько столбцов у вас есть.

Пример вывода (как показано) на терминале из 72 столбцов:

$ printf '0123456789\n1234567890\n' | sed '1s/./&&&&&&&&&&/g;1s/^.//;2s/
.*/&&&&&&&&&&/'
000000000111111111122222222223333333333444444444455555555556666666666777
777777788888888889999999999
123456789012345678901234567890123456789012345678901234567890123456789012
3456789012345678901234567890
$
3
23.05.2017, 15:40
1 ответ

Чтобы выбрать только флаги SSE, попробуйте:

awk '/SSE/' ORS=' ' RS=' '

Ключевым моментом здесь является установка разделителей записей на входе и выходе на пробел. Таким образом, каждый вариант принимается или отклоняется отдельно.

Например:

$ SUNCC_CXXFLAGS="-D__SSE2__ -D__SSE3__ -D__SSSE3__ -D__SSE4_1__ -D__SSE4_2__ -D__AES__ -D__PCLMUL__ ..."
$ newFLAGS="$(echo "$SUNCC_CXXFLAGS" | awk '/SSE/' ORS=' ' RS=' ')"
$ echo "$newFLAGS"
-D__SSE2__ -D__SSE3__ -D__SSSE3__ -D__SSE4_1__ -D__SSE4_2__ 

SSE кажется здесь достаточно точным совпадением. Если это не так, мы можем быть более конкретными:

$ newFLAGS="$(echo "$SUNCC_CXXFLAGS" | awk '/^-D__(SSE2|SSE3|SSSE3|SSE4.1|SSE4.2)__/' ORS=' ' RS=' ')"
$ echo "$newFLAGS"
-D__SSE2__ -D__SSE3__ -D__SSSE3__ -D__SSE4_1__ -D__SSE4_2__ 

Альтернатива: исключение SSE и AES

$ echo "$SUNCC_CXXFLAGS" | nawk '!/SSE|AES/' ORS=' ' RS=' '
-D__PCLMUL__ ...

Сохранение параметров, соответствующих SSE или sse

$ SUNCC_CXXFLAGS="-D__SSE2__ -D__SSE3__ -D__SSSE3__ -D__SSE4_1__ -D__SSE4_2__ -D__AES__ -D__PCLMUL__ -xarch=sse3"
$ newFLAGS="$(echo "$SUNCC_CXXFLAGS" | awk '/SSE|sse/' ORS=' ' RS=' ')"
$ echo "$newFLAGS"
-D__SSE2__ -D__SSE3__ -D__SSSE3__ -D__SSE4_1__ -D__SSE4_2__ -xarch=sse3

. Изменение заключается в том, что мы заменили регулярное выражение / SSE / с / SSE | sse / . Поскольку вертикальная черта | означает логическое «ИЛИ», это соответствует либо SSE , либо sse .

7
27.01.2020, 21:12

Теги

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