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