sed命令在solaris中工作,但在Linux中不工作

时间:2015-07-20 15:05:28

标签: regex linux bash shell sed

我是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

我不知道为什么它会给出无效的范围结束错误。

2 个答案:

答案 0 :(得分:5)

似乎Linux Sed不喜欢你的A-z(两次)。无论如何,它确实没有意义。

使用[A-Z](大写Z)

答案 1 :(得分:3)

正如blue112所说,A-z作为范围是没有意义的。 Solaris sed通过A"的ASCII代码将此解释为" z的ASCII代码,在这种情况下,您可能会出现意外匹配。 A-Za-z之前出现Z,但在a59 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可以防止你误入射中自己。