我有一个文本文件,我需要删除每行等号之前的所有字符,例如:
以下行:
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 行。