Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如何仅在父项所在的行上删除父项前的文本?_Bash_Shell - Fatal编程技术网

Bash 如何仅在父项所在的行上删除父项前的文本?

Bash 如何仅在父项所在的行上删除父项前的文本?,bash,shell,Bash,Shell,我有以下文件: $cat file . . . /image/trafficbulletin/black.jpg . . 当他发现“黑色”时,他应该删除该行中的所有其他内容! 我希望结果是 . . . black . . 我正在使用 $grep-o-P'(?grep-o将只输出与模式匹配的字符串 使用反向引用尝试使用sed: sed 's/.*\(black\).*/\1/' file 一些变体: 正如注释中指出的,在您的情况下,您还可以用所需字符串替换与模式匹配的行: sed '/bla

我有以下文件:

$cat file
.
.
.
/image/trafficbulletin/black.jpg
.
.
当他发现“黑色”时,他应该删除该行中的所有其他内容! 我希望结果是

.
.
.
black
.
.
我正在使用
$grep-o-P'(?

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

使用反向引用尝试使用
sed

sed 's/.*\(black\).*/\1/' file
一些变体:

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

sed '/black/s/.*/black/' file
这相当于:

sed 's/.*black.*/black/' file
使用GNU时,您还可以在一行程序中使用
c
命令:

sed '/black/c black' file

+1.另一方面,由于搜索模式是固定的(而不是正则表达式),这是等效的:
sed'/black/s/*/black/'文件
非常好!