Bash 将路径名修剪到关键字之外(awk、sed、)

Bash 将路径名修剪到关键字之外(awk、sed、),bash,shell,sed,awk,sh,Bash,Shell,Sed,Awk,Sh,我想在找到关键字后将路径名修剪到某个点之外。今天早上我一片空白 /home/quikq/1.0/dev/Java/tsupdater/src/tsupdater.java 我想找到关键词Java,将路径名保存在该tsupdater之外,然后在Java部分之后切断所有内容。我不完全确定您想要什么作为输出。请更清楚地指定,但此命令: echo "/home/quikq/1.0/dev/Java/tsupdater/src/tsupdater.java" | sed 's/.*Java//' ec

我想在找到关键字后将路径名修剪到某个点之外。今天早上我一片空白

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

我想找到关键词Java,将路径名保存在该tsupdater之外,然后在Java部分之后切断所有内容。

我不完全确定您想要什么作为输出。请更清楚地指定,但此命令:

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

/tsupdater/src/tsupdater.java
/home/quikq/1.0/dev/
如果需要前面的部分,则此命令:

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

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

我不完全确定您希望输出什么,请更清楚地指定,但以下命令:

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

/tsupdater/src/tsupdater.java
/home/quikq/1.0/dev/
如果需要前面的部分,则此命令:

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

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

我不知道这是否是您想要的,但您可以使用以下方法将路径名一分为二:

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/}"

希望这有帮助=

我不知道这是否是您想要的,但您可以使用以下方法将路径名一分为二:

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/}"
希望这有帮助=

拿一个你需要的:

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
拿一个你需要的:

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

就像我说的,我度过了一个奇怪的早晨,但我突然明白了

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

屈服

/home/quikq/1.0/dev


这里有很多很好的技巧,可以用不同的方法来切碎它。非常感谢

就像我说的,我度过了一个奇怪的早晨,但我突然明白了

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

屈服

/home/quikq/1.0/dev


这里有很多很好的技巧,可以用不同的方法来切碎它。非常感谢

您想要此:/home/quikq/1.0/dev/Java/tsupdater?请显示示例名称的预期输出。您想要此:/home/quikq/1.0/dev/Java/tsupdater?请显示示例名称的预期输出。%和扩展运算符是POSIX规范的一部分,不是特定于bash的。谢谢!我将在答案中解决它=我不应该在这个问题中标记bash。我想尽量让它便于携带。FWIW,我正在处理AS/400 qsh环境。%和扩展运算符是POSIX规范的一部分,不是特定于bash的。谢谢!我将在答案中解决它=我不应该在这个问题中标记bash。我想尽量让它便于携带。FWIW,我正在处理AS/400QSH环境。接近,但我正在寻找前面的部分,但这也很酷。谢谢很接近,但我正在寻找前面的部分,但这也很酷。谢谢