The regexp should not use .* in the first place, because "." also matches the newline, and you need to use the non-capturing variant of the grouping operator.
$ tclsh % set fd [open "~/src/gcc/gcc/gcc/testsuite/gcc.dg/debug/dwarf2/inline2.s" r] file3 % set text [read $fd] [...] % regexp -inline -all -- "byte.*?0x3.*? DW_AT_inline" $text {byte 0x3 # Start new file .uleb128 0x0 # Included from line number 0 .uleb128 0x1 # file inline2.c .byte 0x1 # Define macro .uleb128 0x0 # At line number 0 .ascii "__STDC__ 1\0" # The macro .byte 0x1 # Define macro .uleb128 0x0 # At line number 0 .ascii "__STDC_HOSTED__ 1\0" # The macro .byte 0x1 # Define macro .uleb128 0x0 # At line number 0 .ascii "__GNUC__ 4\0" # The macro .byte 0x1 # Define macro .uleb128 0x0 # At line number 0 [...] % regexp -inline -all -- "byte\[^\n\]*0x3\[^\n\]* DW_AT_inline" $text {byte 0x3 # DW_AT_inline} {byte 0x3 # DW_AT_inline} {byte 0x3 # DW_AT_inline} % regexp -inline -all -- "(byte|data1)\[^\n\]*0x3\[^\n\]* DW_AT_inline" $text {byte 0x3 # DW_AT_inline} byte {byte 0x3 # DW_AT_inline} byte {byte 0x3 # DW_AT_inline} byte % regexp -inline -all -- "(?:byte|data1)\[^\n\]*0x3\[^\n\]* DW_AT_inline" $text {byte 0x3 # DW_AT_inline} {byte 0x3 # DW_AT_inline} {byte 0x3 # DW_AT_inline} Andreas. -- Andreas Schwab, sch...@redhat.com GPG Key fingerprint = D4E8 DBE3 3813 BB5D FA84 5EC7 45C6 250E 6F00 984E "And now for something completely different."