为什么这个grep <regex>不起作用?

时间:2017-09-25 12:53:11

标签: regex bash grep

以下使用grep的正则表达式似乎不起作用: grep "(?=\_\(\").*?(?=\"\))" ./testfile.js

testfile.js如下:

asoijf oaisdjf _("string 1") fodijsasf _("string 2")
fasdoij _("string 3");
console.log(_("string 4"));

我的目标是获取_()函数调用中包含的所有字符串,而不使用greps -P标志(该选项对我来说不存在)。预期的产出将是:

string 1
string 2
string 3
string 4

有什么想法吗?

更新:在我的mac版本中从bash中删除了-P标志(请参阅grep -P no longer works how can I rewrite my searches

2 个答案:

答案 0 :(得分:1)

请你试试关注awk并告诉我这是否对你有帮助。

public String DateFunction(long timestamp, boolean isToday)
{
    String sDate="";
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault());
    Calendar c = Calendar.getInstance();
    Date netDate = null;
    try {
        netDate = (new Date(timestamp));
        sdf.format(netDate);
        sDate = sdf.format(netDate);
        String currentDateTimeString = sdf.format(c.getTime());
        c.add(Calendar.DATE, -1);
        String yesterdayDateTimeString =  sdf.format(c.getTime());
        if(currentDateTimeString.equals(sDate) && isToday) {
            sDate = "Today";
        } else if(yesterdayDateTimeString.equals(sDate) && isToday) {
            sDate = "Yesterday";
        }
    } catch (Exception e) {
        System.err.println("There's an error in the Date!");
    }
    return sDate;
}

输出如下。

grep -oE '_\([^\)]*' Input_file | cut -c3-

编辑:由于OP在其中没有-P选项,因此也提供了awk方法。

"string 1"
"string 2"
"string 3"
"string 4"

答案 1 :(得分:0)

grep -oP '_\("\K[^"]+' inputfile
string 1
string 2
string 3
string 4

此处,-o将仅打印匹配的结果,而不是整行。 \K将用于后面的外观,Means匹配\K左边的字符串,但不打印它。 [^"]+表示除了"一次或多次以外的任何内容。

或没有-P选项:

grep -oE '_\("[^"]+' inputfile|cut -d'"' -f2
string 1
string 2
string 3
string 4