Предполагается, что смысл состоит в сопоставлении подстрок, таких как [...](2...)
, которые не содержат лишних [
и ]
в квадратных скобках и (
/ )
в скобках, а если вы хотите, чтобы избегайте сопоставления строк, начинающихся с BlaBla:
, вы можете рассмотреть возможность использования
grep -v '^BlaBla:' index.md | grep -o '\[[^][]*](2[^()]*)'
Здесь grep -v '^BlaBla:'
инвертирует совпадение с опцией -v
и выводит все строки, которые НЕ начинаются с BlaBla:
, Затем второй grep
получает необходимые действительные совпадения.
Детали шаблона POSIX BRE
\[
- [
char [^][]*
- ноль или более символов, отличных от [
и ]
]
- ]
char (2
- (2
подстрока [^()]*
- 0 или более символов, отличных от (
и )
)
- )
char.
См. онлайн grep
демо :
s='[Test](202001-test)
BlaBla: [Test2]((202002-test2)'
grep -v '^BlaBla:' <<< "$s" | grep -o '\[[^][]*](2[^()]*)'
Выход:
[Test](202001-test)