以下使用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)
答案 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