我如何使用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
) \+
表示至少有一个匹配项) i
标记) g
标志) 你可以使用grep
轻松地做到这一点:
$ echo www.google.com | grep -o '[^.]*\.com' google.com
而不是echo
你必须给你的文件。
$ grep -o '[^.]*\.com$' < file
我在这里使用正则表达式'[^。] *。com'。 这意味着:没有找到我一个字.
( [^.]*
),之后去.com
( \.com
在重新)。 -o
键表示grep
必须只显示找到的那个部分。
grep
不用于操纵/更改文本,只用于搜索文本中的文本/图案
你应该看看像sed
或awk
或者如果你想要一个命令行工具来cut
。 或者用Python / Perl / Ruby /编写一个脚本。
正如其他人所指出的那样, grep
并不适合这个任务, sed
是一个不错的选择,或者如果文本是有序的,简单的cut
可能更容易输入:
echo www.abc.com | cut -d. -f2-
-d.
告诉cut
使用.
作为分隔符。 -f2-
告诉cut
将字段2返回到无穷大。 尽管sed , awk , cut甚至grep都可以解决这个问题,但我认为grep并不是一个好的选择。