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

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

www.abc.com 

我只需要这个部分

 abc.com 

对不起,基本的问题。 但是没有Linux的经验。

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

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

你需要学习正则表达式来有效地使用它 。

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-]\+\.匹配[a-z0-9-]\+\.
  • 我在正则表达式中使用了组(在\(\)内部分)来表示URL的第一部分和第二部分,我用第二组替换整个匹配(替换模式中的\2
  • 该域名至少应该是第三级.com域名(每个“ \+表示至少有一个匹配项)
  • 搜索是不区分大小写的( i标记)
  • 它可以做比每行更多的匹配(最后是g标志)

你可以使用grep轻松地做到这一点:

 $ echo www.google.com | grep -o '[^.]*\.com' google.com 

而不是echo你必须给你的文件。

 $ grep -o '[^.]*\.com$' < file 

我在这里使用正则表达式'[^。] *。com'。 这意味着:没有找到我一个字.[^.]* ),之后去.com\.com在重新)。 -o键表示grep必须只显示找到的那个部分。

grep不用于操纵/更改文本,只用于搜索文本中的文本/图案

你应该看看像sedawk或者如果你想要一个命令行工具来cut 。 或者用Python / Perl / Ruby /编写一个脚本。

正如其他人所指出的那样, grep并不适合这个任务, sed是一个不错的选择,或者如果文本是有序的,简单的cut可能更容易输入:

 echo www.abc.com | cut -d. -f2- 
  • -d. 告诉cut使用. 作为分隔符。
  • -f2-告诉cut将字段2返回到无穷大。

尽管sedawkcut甚至grep都可以解决这个问题,但我认为grep并不是一个好的选择。

  • grep是一个命令行工具,用于为匹配正则表达式的行搜索纯文本数据集。
  • 但是像sedawt这样的工具是为了逐行处理字符串而存在的。