# If you'd like to omit non-matching lines from the result; add ';d' to the end of the expression.
sed -E 's/(?(DEFINE)
  (?P<ver>\d+(?:\.\d+)*(?![.\d]))
  (?P<agent>Mozilla\/(?&ver))
  (?P<os>(?&os_windows)|(?&os_linux)|(?&os_macintosh)|(?&os_ios))
    (?P<os_windows>Windows[ ]\w+[ ](?&ver))
    (?P<os_linux>Linux(?:[ ](?:i686|x86_64))?)
    (?P<os_macintosh>Macintosh)
    (?P<os_ios>(?:CPU[ ])?iPhone[ ]OS|CPU[ ]OS.*?like[ ]Mac[ ]OS[ ]X)
  (?P<device>(?&device_ios)|(?&device_firefox)|(?&device_android))
    (?P<device_ios>iPhone|iPad)
    (?P<device_firefox>Mobile)
    (?P<device_android>Android(?:[ ](?&ver))?)
  (?P<browser>
    (?:
      (?&browser_ie)
    | (?&browser_safari)
    | (?&browser_chrome)
    | (?&browser_chromium)
    | (?&browser_firefox)
    | (?&browser_version)
#    | (?&browser_nexus)
    | (?&browser_mobile)
    | (?&browser_gsa)
    | (?&browser_quicklook)
    | (?&browser_opera)
    )
    [ \/]
    (?: [A-Z\d]+\b(?!\.) | (?&ver) )
  )
    (?P<browser_safari>(?:Mobile[ ])?Safari)
    (?P<browser_chrome>Chrome)
    (?P<browser_chromium>\b\w+\b[ ]Chromium)
    (?P<browser_firefox>Firefox)
    (?P<browser_ie>MSIE)
    (?P<browser_version>Version)
    (?P<browser_nexus>Nexus[ ]\d+[ ]Build)
    (?P<browser_mobile>Mobile)
    (?P<browser_gsa>GSA)
    (?P<browser_quicklook>QuickLook)
    (?P<browser_opera>OPR)
)
^
  (?:(?=.*?(?P<Agent>(?&agent))))
  (?:(?=.*?(?P<OS>(?&os))))
  (?:(?=.*?(?P<Device>(?&device))))?
  (?:(?=.*?(?P<Browser>(?&browser)(?:[ ](?&browser))*)))?//gmx;t' <<< ""
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for SED, please visit: https://www.gnu.org/software/sed/manual/html_node/The-_0022s_0022-Command.html