如何在patern之前删除patern之前的文本?

时间:2017-03-09 12:19:31

标签: bash shell

我有以下文件:

$cat file
.
.
.
/image/trafficbulletin/black.jpg
.
.

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

.
.
.
black
.
.

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

1 个答案:

答案 0 :(得分:4)

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

尝试使用反向引用sed

sed 's/.*\(black\).*/\1/' file

某些变体:

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

sed '/black/s/.*/black/' file

相当于:

sed 's/.*black.*/black/' file

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

sed '/black/c black' file