如何使用 AWK 或 CUT 从每一行中删除最后一个单词

如何使用 AWK 或 CUT 从每一行中删除最后一个单词
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和 开始提取/,然后再次反转,但这似乎有点太多工作,因为两者sedawk可以更干净地完成相同的工作。

$ 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

相关内容