Sed/awk/perl находят все префиксы заданной строки

Sed/awk/perl находят все префиксы заданной строки

Я хотел бы сопоставить все строки в файле, в которых либо мое слово является префиксом, либо строка является префиксом моего слова. Например, поиск "abc" должен совпасть:

а
аб
абв
абвг абвг
абвхyz

но нет:

xabc
zzab
xaz

Часть "мое слово является префиксом" проста, просто сопоставьте " ^abc" конечно, но я не придумал решения для части "строка является префиксом моего слова". Попробовал что-то в awk, но не смог сделать содержимое строки частью регулярного выражения.

решение1

Вам нужно обработать два случая: когда строка короче строки поиска или когда она длиннее.

Если строка длиннее, необходимо проверить, совпадает ли начало строки с тестовой строкой.

Если строка короче, необходимо проверить, совпадает ли начало строки поиска со строкой.

В случаях, когда длины равны, работает любой из методов.

awk -v search=abc 'length() > length(search) ? substr($0, 1, length(search)) == search : substr(search, 1, length()) == $0' inputfile

Связанный контент