如何使用 sed 删除特定符号之前的所有字符?

如何使用 sed 删除特定符号之前的所有字符?

我有一个文本文件,我需要删除每行等号之前的所有字符,例如:

以下行:

File 1515 = foo.txt

需要看起来像这样:

=foo.txt

我尝试了这个sed命令:

sed s/=[^=]*^// everyone.pls

但它会删除等号后面的所有字符。

我怎样才能删除之前的字符=

答案1

删除之前的所有内容第一的等号:

sed 's/^[^=]*=/=/' everyone.pls

如果文件everyone.pls如下所示:

$ cat everyone.pls
File 1515 = foo.txt
File 1516 = foo=.xls

上述命令产生的结果:

$ sed 's/^[^=]*=/=/' everyone.pls
= foo.txt
= foo=.xls

在正则表达式中^[^=]*=/,前导插入符号表示正则表达式必须从行首开始匹配。表达式[^=]*=匹配每个字符,直到包括第一个等号。因为我们想在输出中显示等号,所以我们需要用等号替换所有等号。

答案2

您可以使用

sed 's/.*=/=/g' everyone.pls

删除 = 之前的字符

答案3

sed 's/.*= */=/' YourFile

在您的样本中,您也可以=删除之后的空间,只需“调整”其他不考虑该内容但您询问的答复(直到=)。

答案4

几乎正确 - 只需将表达式的顺序倒过来即可。您要做的就是将=第一个字符=及其后面的空格替换为单个=字符。

像这样:

sed 's/[^=]*= */=/'

=您的表达式将用 替换包括行上第一个字符在内的所有字符=

并且不要介意初始^最左边的锚点 - ;sed无论如何都会从左到右读取输入,因此如果它读取匹配 0 个=字符的整个输入行,它将什么也不做,但对于所有其他输入行,它只会将其规则应用到最左边的=oa 行。

相关内容