
Я хотел бы сопоставить все строки в файле, в которых либо мое слово является префиксом, либо строка является префиксом моего слова. Например, поиск "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