修剪关键字之外的路径名(awk,sed,?)

时间:2012-10-19 13:56:28

标签: bash shell sed awk sh

我想在找到关键字后修剪超过某个点的路径名。我今天早上画空了。

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

我想找到关键字Java,保存超出该值的路径名(tsupdater),然后在Java部分之后关闭所有内容。

4 个答案:

答案 0 :(得分: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 :(得分:1)

我不完全确定你想要的输出(请更清楚地说明),但是这个命令:

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

结果:

/tsupdater/src/tsupdater.java

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

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

结果:

/home/quikq/1.0/dev/

答案 2 :(得分: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

答案 3 :(得分:0)

就像我说的那样,我有一个奇怪的早晨,但我突然明白了。

echo /home/quikq/1.0/dev/Java/TSUpdater/src/TSUpdater.java | sed s / Java。* // g

产量

/home/quikq/1.0/dev

这里有很多很棒的提示,可以用不同的方法来切割它。非常感谢!