我想像这样抓住字符串中的数字:
"sample_2341-43-11.txt" to 2341-43-11
所以我尝试了以下命令:
echo "sample_2341-43-11.txt" | sed -n -r 's|[0-9]{4}\-[0-9]{2}\-[0-9]{2}|\1|p'
我看到了这个答案,这就是我的想法。 Use sed to grab a string,但它在我的机器上不起作用:
-r
”。 \1
。我在MacOSX优胜美地上使用sed。
这是从文件名中提取信息的最简单方法吗?
答案 0 :(得分:2)
您需要设置分组并匹配其余部分以将其与组一起删除。此外 - 不需要转义。并且-n将禁止输出(它只返回脚本条件的退出级别)。
echo "sample_2341-43-11.txt" | sed -r 's/^.*([0-9]{4}-[0-9]{2}-[0-9]{2}).*$/\1/'
答案 1 :(得分:2)
在sed。的Mac版本中,增强的正则表达式为not supported。
您可以改为使用int nTimeIdxNum = -1;
try {
nTimeIdxNum = k.indexOf("x22T:");
}catch(Exception e) {
System.out.println(e.getMessage());
}
if (nTimeIdxNum > -1) {
String local_date = "";
System.out.println("k.length() = " + k.length());
System.out.println("nTimeIdxNum = " + String.valueOf(nTimeIdxNum));
try {
local_date = k.substring(nTimeIdxNum, 13);
}catch(Exception e) {
System.out.println(e.getMessage());
}
:
return null
<强>输出强>
protected JSONObject doInBackground(String... args) {
// declare it here
JSONObject json = null;
GCMRegistrar.checkDevice(context);
GCMRegistrar.checkManifest(context);
final String regId = GCMRegistrar.getRegistrationId(context);
if (regId.equals("")) {
GCMRegistrar.register(context,SENDER_ID);
}else {
if (GCMRegistrar.isRegisteredOnServer(context)) {
Toast.makeText(getApplicationContext(), "Already registered with GCM", Toast.LENGTH_LONG).show();
} else {
UserFunctions userFunction = new UserFunctions();
json =userFunction.registerUser(context,fname, lname, email, password,regId);
}
}
// if the criteria isn't met then return the null object reference
return json;
}
答案 2 :(得分:0)
echo "one1sample_2341-43-11.txt" \
| sed 's/[^[:digit:]-]\{1,\}/ /g;s/ \{1,\}/ /g;s/^ //;s/ $//'
1 2341-43-11
-
完成的所有数字(数字)(因此允许--12
但可以轻松处理)答案 3 :(得分:0)
您也可以尝试这种方式
sed 's/[^_]\+_\([^.]\+\).*/\1/' <<< sample_2341-43-11.txt
<强>输出:强>
2341-43-11
<强>解释强>
[^_]\+ - Match the content untile _ ( sample_)
\([^.]\+\) - Match the content until . and capture the pattern (2341-43-11)
.* - Discard remaining character (.txt)
答案 4 :(得分:-1)