将行的一部分提取到特定字符串

rɑː*_*dʒɑ 3 command-line bash grep

让我们假设我有一个包含以下行的文件:

/java/jdkxx/jvm_jdk/bin/opt
/java/jre/jre_jvm/bin/opt
/foo/bar/bin/other/stuff/here
Run Code Online (Sandbox Code Playgroud)

有没有办法可以将部分行提取到bin. 我的意思是,假设这些行在file.txt那时

$ <some_command> file.txt 
/java/jdkxx/jvm_jdk/bin/
/java/jre/jre_jvm/bin/
/foo/bar/bin/
Run Code Online (Sandbox Code Playgroud)

gle*_*man 8

有很多方法可以做到这一点。这里有一些:

# greedily caputure up to the last slash
grep -o '.*/bin/' file.txt
Run Code Online (Sandbox Code Playgroud)
# remove all non-slash chars from the end of each line
sed 's#\(/bin/\).*$#\1#' file.txt
Run Code Online (Sandbox Code Playgroud)
# using slash as a delimiter, blank out the last field
awk -F/ -v OFS=/ '{for (i=1; i<=NF; i++) if ($i == "bin") {NF=i; break}} 1' file.txt
Run Code Online (Sandbox Code Playgroud)