正则表达式从输出中获取特定的字符串

时间:2018-12-07 04:19:54

标签: regex

在linux中执行以下命令时

root@11.222.33.38.11:~#  cat /etct/user.conf

我将获得以下数据。

[General]
ui_language=US_en

由此,我仅需要使用正则表达式来获取ui_language(US_en)的值。

2 个答案:

答案 0 :(得分:1)

您可以通过管道传输到grep和sed:

cat foo.txt | grep 'ui_language=' | sed 's/ui_language=\(.*\)/\1/g'

用您的文件名替换foo.txt。

示例:

host$ cat foo.txt 
[General]
ui_language=US_en
host$ cat foo.txt | grep 'ui_language=' | sed 's/ui_language=\(.*\)/\1/g'
US_en
host$ 

编辑:我没意识到你想使用Java。最初未使用Java对其进行标记。 您可以执行以下操作:

MatchExample.java

import java.util.regex.*;
import java.io.File;
import java.nio.file.Files;

public class MatchExample {

    public static void main(String[] args) throws Exception {

        byte[] bytes = Files.readAllBytes((new File(args[0])).toPath());
        String s = new String(bytes,"UTF-8");

        Pattern pattern = Pattern.compile("ui_language=(.*)");
        Matcher matcher = pattern.matcher(s);
        if (matcher.find()){
            System.out.println(matcher.group(1));
        }
    }

}

这将文件名作为第一个参数。

编译:

host$ javac MatchExample.java 

运行:

host$ java MatchExample foo.txt 
US_en
host$ 

答案 1 :(得分:0)

Pattern pattern = Pattern.compile("US_en");
Matcher matcher = pattern.matcher(mydata);
    if (matcher.find()){
        System.out.println(matcher.group(1));
    }

在这里,mydata是您要从中获取数据的字符串