我是shell脚本和sed
命令的新手。
以下sed
命令在Solaris中有效,但在Linux中出错:
sed -n 's/^[a-zA-z0-9][a-zA-z0-9]*[ ][ ]*\([0-9][0-9]*\).*[/]dir1[/]subdir1\).*/\2:\1/p'
错误:
sed: -e expression #1, char 79: Invalid range end
我不知道为什么它会给出无效的范围结束错误。
答案 0 :(得分:5)
似乎Linux Sed不喜欢你的A-z
(两次)。无论如何,它确实没有意义。
使用[A-Z]
(大写Z)
答案 1 :(得分:3)
正如blue112所说,A-z
作为范围是没有意义的。 Solaris sed通过A
"的ASCII代码将此解释为" z
的ASCII代码,在这种情况下,您可能会出现意外匹配。 A-Z
在a-z
之前出现Z
,但在a
和59 Y
5a Z
----
5b [
5c \
5d ]
5e ^
5f _
60 `
----
61 a
62 b
之间有一些字符。
_
以下是一个显示Solaris sed的示例(本例中为Solaris 8)。鉴于此范围,它会替换\
和% echo "f3oo_Ba\\r" | /usr/bin/sed 's/[A-z]/./g';echo
.3.....
以及您显然定位的字母。
3
(请注意 private WeakReference<Activity> mActivityRef;
@Override
public void onFinish() {
Activity activity = mActivityRef.get();
// if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
//do your thing!
if (activity != null && !activity.isFinishing() && !activity.isDestroyed()) {
activity.startActivity(new Intent(activity, ListOfAlarms.class));
activity.finish();
}
mStarted = false;
// }
// Intent goBack = new Intent(CountDownAct.this, ListOfAlarms.class);
// startActivity(goBack);
// finish();
}
未被替换,因为它不属于指定的ASCII范围。)
GNU sed可以防止你误入射中自己。