Регулярное выражение для соответствия начала и конца строки?
Может ли кто-нибудь сказать мне регулярное выражение, которое соответствует началу или концу строки? например, если бы я использовал sed 's/[regex]/"/g' filehere
вывод будет каждая строка в кавычках? Я старался [\^$]
а также [\^\n]
но ни один из них, казалось, не работал. Я, наверное, упускаю что-то очевидное, я новичок в этих
3 ответа
Добавить кавычки в начале и конце каждой строки просто:
sed 's/.*/"&"/g'
Тем не менее, RE, который вы пытались найти, чтобы соответствовать началу или концу каждой строки:
sed -r 's/^|$/"/g'
Это ERE (включить с помощью "-r"), поэтому он будет работать с GNU sed, но не с более старыми.
Ответ Маттиаса вполне адекватен, но вы также можете использовать обратную ссылку для этого. если вы изучаете регулярные выражения, их удобно знать.
Вот как это можно сделать с помощью обратной ссылки:
sed 's/\(^.*$\)/"\1"/g' file
в основе этого регулярного выражения ^.*$
, что означает совпадение чего-либо (.*
) в окружении начала строки (^
) и конец строки ($
), что фактически означает, что он будет соответствовать всей строке каждый раз.
помещение этого термина в круглые скобки создает обратную ссылку, к которой мы можем обратиться позже (в шаблоне замены). но для того, чтобы sed понял, что вы хотите создать обратную ссылку вместо литеральных скобок, вы должны избегать их с помощью обратной косой черты. таким образом, мы в конечном итоге \(^.*$\)
как наш шаблон поиска.
шаблон замены - это просто двойная кавычка, за которой следует \1
, который является нашей обратной ссылкой (относится к первому совпадению с шаблоном, заключенному в круглые скобки, отсюда 1). затем добавьте свою последнюю двойную кавычку, чтобы в итоге "\1"
,