如何使用grep删除单词的开头?例如:我有一个包含以下内容的文件:
www.abc.com
我只需要部分
abc.com
对不起基本问题。但是没有Linux经验。
答案 0 :(得分:7)
您不在Unix shell中使用grep
编辑字符串,grep
通常用于查找或删除文本中的某些行。您宁可使用sed
代替:
$ echo www.example.com | sed 's/^[^\.]\+\.//'
example.com
您需要学习正则表达式to use it effectively。
如果你传递-i
参数,那么sed也可以就地编辑文件(修改文件),但是要小心,如果你写了错误的sed
命令并且使用{,你很容易丢失数据{1}}旗帜。
根据您的评论猜测您有TeX文档,并且您想要删除所有.com域名的第一部分。如果是您的文档-i
:
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
次回复至少表示一次匹配)\+
标志)i
标志到底)答案 1 :(得分:5)
您可以轻松地使用grep
执行此操作:
$ echo www.google.com | grep -o '[^.]*\.com'
google.com
您必须提供文件,而不是echo
。
$ grep -o '[^.]*\.com$' < file
我在这里使用正则表达式'[^。] *。com'。这意味着:找到一个没有.
的单词([^.]*
),然后.com
(重新\.com
)。 -o
密钥表示grep
必须仅显示找到的部分。
答案 2 :(得分:3)
grep
不用于操作/更改文本,仅用于搜索文本中的文本/模式
如果您需要命令行工具,则应该查看sed
或awk
或cut
之类的内容。或者用Python / Perl / Ruby等编写脚本。
答案 3 :(得分:2)
正如其他人所指出的那样,grep
不适合这项任务,sed
是一个不错的选择,或者如果文字订购得很好,简单的cut
可能更容易类型:
echo www.abc.com | cut -d. -f2-
-d.
告诉cut
使用.
作为分隔符。-f2-
告诉cut
将字段2返回无限。答案 4 :(得分:0)
虽然 sed , awk ,剪切甚至 grep 都可以解决问题,但我认为 grep 不是一个好选择。
答案 5 :(得分:0)
实际上,您可以在不调用其他程序的情况下执行此操作,方法是在bash中使用内置参数扩展:
func textViewShouldBeginEditing(_ textView: UITextView) -> Bool {
let keyboardToolBar = UIToolbar()
keyboardToolBar.backgroundColor = .cyan
keyboardToolBar.sizeToFit()
let btn1 = UIBarButtonItem(title: "Done", style: .done, target: self, action: #selector(self.doneBtnAction))
keyboardToolBar.items = [btn1]
textView.inputAccessoryView = keyboardToolBar
return true
}
@objc func doneBtnAction(sender: UIBarButtonItem) {
aTextView.resignFirstResponder()
}
while read line; do echo ${line#*.}; done < file
告诉shell删除前缀为0或更多字符后跟#*.
的前缀。
您可以在此处查看包含bash不同参数扩展的备忘单:
答案 6 :(得分:0)
您可以使用positive lookbehind和grep的--only-matching
标志来做到这一点:
echo "www.abc.com" | grep --perl-regexp --only-matching '(?<=www\.).*'
可以减少为
echo "www.abc.com" | grep -Po '(?<=www\.).*'
两种产品
abc.com
使用grep(GNU grep)3.3。