如何使用 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/