打印斜杠后的所有内容

打印斜杠后的所有内容

我找到了如何打印斜杠之前的所有内容,但是我需要打印斜杠之后的所有内容。我有一个像这样的字符串blablabal/important,我只需要打印important.我应该如何修改下面的行以打印斜杠之后而不是之前的所有内容?

sed 's:/[^/]*$::'

答案1

只需删除最后一个斜杠之前的所有内容:

$ echo "blablabal/important" | sed 's:.*/::'
important

它也适用于多个斜杠:

$ echo "blablabal/not/ver/interesting/important" | sed 's:.*/::'
important

答案2

看起来其他答案假设您在一个文件中有多行数据,这些数据都需要处理。在这种情况下sedawk(或可能cut)将是一次性处理所有行的最佳工具。

但是,如果 shell 变量中只有一行(假设您正在使用bash),则可以使用 shell 扩展来实现所需的结果,而无需在外部进程中生成实用程序:

$ var="interesting/bla/blablabal/important"
$ 
$ # everything after the first slash:
$ echo "${var#*/}"
bla/blablabal/important
$ # everything after the last slash:
$ echo "${var##*/}"
important
$ # everything before the first slash:
$ echo "${var%%/*}"
interesting
$ # everything before the last slash:
$ echo "${var%/*}"
interesting/bla/blablabal
$ 

或者,我假设您的斜杠分隔的字符串是文件路径。如果是这种情况,您可以使用dirnamebasename来获取路径和文件名部分:

$ # everything before the last slash:
$ dirname "$var"
interesting/bla/blablabal
$ # everything after the last slash:
$ basename "$var"
important
$ 

答案3

既然您在评论中提到该文件只有一个斜杠,为什么不直接使用 呢awk

例子:

 ❱ echo "blablabal/important" | awk -F'/' '{print $1}'
blablabal
 ❱ echo "blablabal/important" | awk -F'/' '{print $2}'
important

答案4

sed -et -e's|/|&\n|;//D' <in >out

...将打印包含斜杠的任何行上第一个斜杠之后的所有内容,否则打印任何其他未修改的内容。如果你删除它,//它只会打印它修改的行。

您可能需要使用文字\newline 代替n不过\n,取决于您的sed版本。

另外,如果您指定出现次数...

sed -et -e's|/|&\n|num;/\n/D'

...您最多可以删除编号一行上的斜杠不影响任何不包含至少编号斜杠。

相关内容