2012-10-19 119 views
1

我想在查找关键字后在某个点以外修剪路径名。我今天早上画了一张空白。修剪超出关键字的路径名(awk,sed,?)

/home/quikq/1.0/dev/Java/tsupdater/src/tsupdater.java 

我想找到关键字的Java,保存路径超出(tsupdater),那么Java部分切开后,关闭一切。

+0

你想要这个:'/ home/quikq/1.0/dev/Java/tsupdater'? – Kent

+1

请显示示例名称的预期输出。 –

回答

1

我不是很确定你想要什么作为输出(请注明更清晰),但这个命令:

echo "/home/quikq/1.0/dev/Java/tsupdater/src/tsupdater.java" | sed 's/.*Java//' 

结果:

/tsupdater/src/tsupdater.java 

如果你想在前面的部分,那么这个命令:

​​

的结果

/home/quikq/1.0/dev/ 
+1

关闭,但我正在寻找前面的部分,但这也很酷。谢谢! –

3

我不知道这是不是你想要的,但你可以在路径名分成两个:

echo "/home/quikq/1.0/dev/Java/tsupdater/src/tsupdater.java" | sed 'h;s/.*Java//p;g;s/Java.*/Java/' 

,输出:

/tsupdater/src/tsupdater.java 
/home/quikq/1.0/dev/Java 

如果你想保存第二部分为文件part2.txt并打印第一部分,你可以这样做:

echo "/home/quikq/1.0/dev/Java/tsupdater/src/tsupdater.java" | sed 'h;s/.*Java//;wpart2.txt;g;s/Java.*/Java/' 

如果你正在写一个shell脚本:

myvar="/home/quikq/1.0/dev/Java/tsupdater/src/tsupdater.java" 
part1="${myvar%Java*}Java" 
part2="${myvar#*Java/}" 

希望这有助于=)

+1

'%'和'#'扩展操作符是POSIX规范的一部分,不是特定于'bash'。 – chepner

+0

谢谢!我会修复它的答案=) –

+0

我不应该在这个问题上标记bash。我想保持它尽可能便携。 FWIW,我正在处理AS/400“qsh”环境。 –

1

采取一个你需要:

kent$ echo "/home/quikq/1.0/dev/Java/tsupdater/src/tsupdater.java"|sed -r 's#(.*Java/[^/]*).*#\1#g' 
/home/quikq/1.0/dev/Java/tsupdater 

kent$ echo "/home/quikq/1.0/dev/Java/tsupdater/src/tsupdater.java"|sed -r 's#(.*Java).*#\1#g' 
/home/quikq/1.0/dev/Java 

kent$ echo "/home/quikq/1.0/dev/Java/tsupdater/src/tsupdater.java"|sed -r 's#.*Java/([^/]*).*#\1#g' 
tsupdater 
0

就像我说的,我做了一个奇怪的早晨,但我恍然大悟。

echo /home/quikq/1.0/dev/Java/TSUpdater/src/TSUpdater.java | SED S/Java的。* // g^

息率

/home/quikq/1.0/dev

很多伟大的秘诀这里虽然砍它不同的方式。谢谢一堆!