regex - 如何使用 grep 删除单词前缀?

标签 regex linux shell sed

如何使用 grep 删除单词的开头?例如,我有一个包含以下内容的文件:

www.abc.com

我只需要这部分:

abc.com

抱歉这个基本问题,但我没有使用 Linux 的经验。

最佳答案

您不能在 Unix shell 中使用 grep 编辑字符串,grep 通常用于查找或删除文本中的某些行。您宁愿使用 sed 代替:

$ echo www.example.com | sed 's/^[^\.]\+\.//'
example.com

你需要学习正则表达式 to use it effectively .

sed 也可以就地编辑文件(修改文件),如果你传递 -i 参数,但要小心,如果你写错了 sed<,你很容易丢失数据 命令并使用 -i 标志。

一个例子

根据您的评论猜测您有一个 TeX 文档,并且您想要删除所有 .com 域名的第一部分。如果是你的文档 test.tex:

\documentclass{article}
\begin{document}
www.example.com
example.com www.another.domain.com
\end{document}

然后您可以使用此 sed 命令对其进行转换(将输出重定向到文件或使用 -i 就地编辑):

$ sed 's/\([a-z0-9-]\+\.\)\(\([a-z0-9-]\+\.\)\+com\)/\2/gi' test.tex 
\documentclass{article}
\begin{document}
example.com
example.com another.domain.com
\end{document}

请注意:

  • [a-z0-9-]\+\.
  • 匹配一个常见的允许符号序列后跟一个点
  • 我在正则表达式中使用组(它的一部分在 \(\) 中)来指示 URL 的第一部分和第二部分,然后我替换与第二组的整个匹配(替换模式中的\2)
  • 域至少应为 3 级 .com 域(每个 \+ 重复表示至少匹配一次)
  • 搜索不区分大小写(i 标志在最后)
  • 它可以做的不仅仅是每行匹配(最后是 g 标志)

关于regex - 如何使用 grep 删除单词前缀?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11673287/

相关文章:

Linux文件删除错误

php - 将递归 PHP 正则表达式转换为 JavaScript

c++ - uri 正则表达式模式匹配

linux - Makefile:当一个文件在另一个文件之后更新时执行特定命令

linux - 我似乎无法在 bash 脚本中传递带有空格的参数

c++ - 如何编译静态库并使用 g++ 链接到它?

c# - 使用带有 Regex 的 Linq 删除空匹配项

javascript - 为什么我的 Javascript 正则表达式的输出不一致?

shell - 忽略setenv命令中的错误,并继续执行csh脚本

c - 如何在 shell 命令行中输入退格字符?