如何仅在模式所在的行上删除模式之前的文本?

Alf*_*res 3 bash shell

我有以下文件:

$cat file
.
.
.
/image/trafficbulletin/black.jpg
.
.
Run Code Online (Sandbox Code Playgroud)

当他发现“黑色”时,他应该只删除该行中的所有其他内容!我希望结果是

.
.
.
black
.
.
Run Code Online (Sandbox Code Playgroud)

我正在使用 $ grep -o -P '(?<=tin/).*(?=.jpg)' file 但是这会删除所有其他行:(

SLe*_*ort 5

grep -o 将只输出匹配模式的字符串。

尝试sed使用反向引用:

sed 's/.*\(black\).*/\1/' file
Run Code Online (Sandbox Code Playgroud)

一些变化:

正如评论中指出的那样,在您的情况下,您还可以用所需的字符串替换与模式匹配的行:

sed '/black/s/.*/black/' file
Run Code Online (Sandbox Code Playgroud)

这相当于:

sed 's/.*black.*/black/' file
Run Code Online (Sandbox Code Playgroud)

使用 GNU sed,您还可以c在一行中使用该命令:

sed '/black/c black' file
Run Code Online (Sandbox Code Playgroud)