Я хочу представить моего фаворита на этот вопрос, так как он еще не был упомянут. Мне нравится использовать простую операцию добавления строки в awk, которая является просто оператором по умолчанию между двумя терминами, в качестве умножения в типичных математических обозначениях:
x = x"more stuff"
добавляет "more stuff"
к x
и снова устанавливает новое значение на x
. Так что вы можете написать
regexp = ""
regexp = regexp"[0-9]{10}"
regexp = regexp"[0-9]{3}[-.][0-9]{3}[.-][0-9]{4}"
regexp = regexp"\\([0-9]{3}\\) ?[0-9]{3}-[0-9]{4}"
Для управления дополнительными символами разделения, такими как переводы строк между фрагментами, которые есть в большинстве языков, которые я знаю, и на awk, можно использовать методы соединения и разделения массива, чтобы создать строку из массива и преобразовать строку обратно в массив, не теряя оригинал структура массива (например, маркеры новой строки):
i = 0
regexp[i++] = "[0-9]{10}"
regexp[i++] = "[0-9]{3}[-.][0-9]{3}[.-][0-9]{4}"
regexp[i++] = "\\([0-9]{3}\\) ?[0-9]{3}-[0-9]{4}"
Используя regstr = join(regexp, ",")
добавьте разделение "," которое вы использовали.
Конечно, в awk нет функции соединения, но я думаю, что это очень просто
реализовать, зная операцию добавления строки выше.
Мой метод выглядит более многословным, но имеет то преимущество, что к исходным данным, фрагментам строки regexp в этой части, добавляется строковая константа для каждого фрагмента. Это означает, что код может быть сгенерирован очень простым алгоритмом (или даже ярлыками некоторых редакторов).