ACRBAMIDKC124,/Program Files (x86)/BigFix Enterprise/BES Client/__GTS/jre/bin/java.exe
ACRBAMIDKC124,/Program Files/Java/jre6/bin/java.exe
ACRBAMIDKC125,/Program Files/Tivoli/TSM/baclient/jvm80535/jre/bin/java.exe
以及我们想要的预期输出
ACRBAMIDKC124,/Program Files (x86)/BigFix Enterprise/BES Client/__GTS/jre/bin
ACRBAMIDKC124,/Program Files/Java/jre6/bin
ACRBAMIDKC125,/Program Files/Tivoli/TSM/baclient/jvm80535/jre/bin
答案1
$ sed 's,/[^/]*$,,' file
ACRBAMIDKC124,/Program Files (x86)/BigFix Enterprise/BES Client/__GTS/jre/bin
ACRBAMIDKC124,/Program Files/Java/jre6/bin
ACRBAMIDKC125,/Program Files/Tivoli/TSM/baclient/jvm80535/jre/bin
这用于sed
删除/
每行最后一个字符之后的所有内容。
正则表达式/[^/]*$
与行末尾的斜杠后跟任意数量的非斜杠字符匹配,并且替换会删除这些字符(将它们替换为空)。
同样的事情在awk
:
awk '{ sub("/[^/]*$", ""); print }' file
该cut
实用程序在这里使用起来会很尴尬,因为您没有固定的分隔符可供剪切。你显然可以撤销每一行都从rev
和 开始提取/
,然后再次反转,但这似乎有点太多工作,因为两者sed
都awk
可以更干净地完成相同的工作。
$ rev file | cut -d '/' -f 2- | rev
ACRBAMIDKC124,/Program Files (x86)/BigFix Enterprise/BES Client/__GTS/jre/bin
ACRBAMIDKC124,/Program Files/Java/jre6/bin
ACRBAMIDKC125,/Program Files/Tivoli/TSM/baclient/jvm80535/jre/bin
答案2
您可以尝试使用以下方法:
awk -F\/ 'BEGIN {OFS="/"} {$NF=""} 1' input_file
或者您可以使用它来避免尾随斜杠(与 GNU 一起使用awk
,可能不适用于其他版本)
awk -F\/ 'BEGIN {OFS="/"} {NF-=1} 1' input_file
答案3
命令
awk -F "/" 'OFS="/"{$NF="";print $0}' filename| sed "s/\/$//g"
输出
ACRBAMIDKC124,/Program Files (x86)/BigFix Enterprise/BES Client/__GTS/jre/bin
ACRBAMIDKC124,/Program Files/Java/jre6/bin
ACRBAMIDKC125,/Program Files/Tivoli/TSM/baclient/jvm80535/jre/bin
答案4
用python方法完成
#!/usr/bin/python
import re
y=re.compile(r'/[a-z]*\.[a-z]*$')
k=open('i.txt','r')
for i in k:
print re.sub(y,"",i).strip()
输出
ACRBAMIDKC124,/Program Files (x86)/BigFix Enterprise/BES Client/__GTS/jre/bin
ACRBAMIDKC124,/Program Files/Java/jre6/bin
ACRBAMIDKC125,/Program Files/Tivoli/TSM/baclient/jvm80535/jre/bin