如何获得字符串,直到第二次出现“-”和数字

时间:2018-11-22 09:18:12

标签: regex unix

示例:prod2-03_dl-httpd-prod-8080_access_referer_log.20181111-050000

直到prod2-03_dl-httpd-prod,我仍然需要价值 因此,基本上我们需要直到第二次出现“-”和数字的值。

我们尝试了以下选项:-

echo "prod2-03_dl-httpd-prod-8080_access_referer_log.20181111-050000" | sed -r 's/([^-][:digit:]+[^-][:digit:]).*/\1/'

2 个答案:

答案 0 :(得分:2)

使用pcregrep和积极的前瞻:

$ echo "prod2-03_dl-httpd-prod-8080_access_referer_log.20181111-050000" | 
  grep -Po "^[^-]*-.*?(?=-[0-9])"
prod2-03_dl-httpd-prod

解释了一些:

  • grep -P:使用PCRE
  • 字符串开头的
  • ^
  • [^-]*所有非破折号
  • -后接破折号
  • .*?后跟任何非贪婪的内容
  • (?=-[0-9])积极寻找破折号和数字

答案 1 :(得分:0)

似乎可以将字符串解析为定界字符串,请使用PdfConverter converter = PdfConverter.getInstance(); File file = new File(Environment.getExternalStorageDirectory().toString(), "file.pdf"); String htmlString = "html code here"; converter.convert(getContext(), htmlString, file);

awk

请参见online awk demo

在这里

  • s="prod2-03_dl-httpd-prod-8080_access_referer_log.20181111-050000" awk -F'-' '{print $1 "-" $2 "-" $3}' <<< "$s" # => prod2-03_dl-httpd awk -F'-' '{sub(/_.*/, "", $5); print $5}' <<< "$s" # => 8080 awk -F'[-_]' '{print $6}' <<< "$s" # => 8080 将字段分隔符设置为-F'-'
  • -打印从1到3的字段,中间用分隔符
  • {print $1 "-" $2 "-" $3}删除字段5中第一个sub(/_.*/, "", $5)开头的所有文本,然后打印出来
  • 如果_-的数目在_之前是恒定的,则可以使用8080分隔符,那么[-_]就足够了。