如何删除 bash 中某个词后的所有文本,保留该词

How can I remove all text AFTER a word in bash, keeping the word

所以,如果我有这样的 .txt:

He.likes.coding
She.likes.juice
He.likes.coffee

变成:

He.likes
She.likes
He.likes

所以它会保留特殊文本 (.likes)

如果这个问题已经有答案,很抱歉,我没有找到。我找到的所有那些也删除了.likes。

你可以使用 sed。

sed 's/\.likes.*/.likes/' file

.* 匹配除换行符之外的任何字符,零次或多次。这里我们不需要添加 g 全局标志,因为每行只发生一次匹配。

使用捕获组。

sed 's/\(\.likes\).*//' file

这是一个awk

awk -F"likes" '{print FS}' file
He.likes
She.likes
He.likes

它使用 likes 分隔字段,然后打印它之前的所有内容和字段分隔符。


如果还有其他行不应该改变,使用这个:

awk -F"likes" 'NF>1{[=11=]=FS}1' file

它只会更改行 中有 likes

使用 GNU grep:

grep -oP '.*likes' file

输出:

He.likes
She.likes
He.likes