斜线后打印所有内容

Iri*_*der 10 sed text-processing

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

sed 's:/[^/]*$::'
Run Code Online (Sandbox Code Playgroud)

ter*_*don 21

只需删除所有内容,直到最后一个斜杠:

$ echo "blablabal/important" | sed 's:.*/::'
important
Run Code Online (Sandbox Code Playgroud)

它也适用于多个斜杠:

$ echo "blablabal/not/ver/interesting/important" | sed 's:.*/::'
important
Run Code Online (Sandbox Code Playgroud)

  • `sed 's/.*\///'` 可能更符合 POSIX 标准。 (2认同)

Sly*_*Sly 15

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

例子:

 ? echo "blablabal/important" | awk -F'/' '{print $1}'
blablabal
 ? echo "blablabal/important" | awk -F'/' '{print $2}'
important
Run Code Online (Sandbox Code Playgroud)


Dig*_*uma 15

看起来其他答案是假设您在一个文件中有多行数据,这些数据都需要处理。在这种情况下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
$ 
Run Code Online (Sandbox Code Playgroud)