grep如何只输出匹配的字符串,而不是输出一整行?

如题所述

第1个回答  2012-03-21
grep没办法,sed 可以做到(-n选项加p命令)。追问

比如grep本来输出下面这一行:
adkj2 232dslasd [email protected] sadh
我该如何使用sed命令让他只输出
[email protected]
呢?

追答

sed '/[email protected]/ s/.* \([^ ]*@163.com\) .*/\1/' file.txt

/[email protected]/
先正则匹配过滤出包含[email protected]的行,格式: /正则/

再用替换命令 s/.../.../ 处理,\1 引用前面用 \( \) 括起来的组。

追问

sed: -e 表达式 #1, 字符 1: 未知的命令:“'”
这个是什么意思?

追答

不知道,我在Ubuntu下运行ok。
你确认命令跟我的一样?

# echo "adkj2 232dslasd [email protected] sadh"|sed '/[email protected]/ s/.* \([^ ]*@163.com\) .*/\1/'
[email protected]

追问

哦,我看网上说的,都在 ' 前面加了一个\,结果怎么都不对
还是你这个对,谢谢啦~
btw,为什么他们都加了一个 \ 呢?

追答

才看到...不明白你的意思。

本回答被提问者采纳
第2个回答  推荐于2018-03-04
使用参数-o
grep -o pattern file本回答被网友采纳
第3个回答  2019-12-24
如果这速度匹配的字符的话而不是说这一整行的话我觉得这个你需要输入的话进行一些规则性的调整可以了
第4个回答  2013-03-30
djy@game-rd10:~> echo "adkj2 232dslasd [email protected] sadh"|grep -o "[email protected]"
[email protected]
第5个回答  2022-11-21
grep -o "xxxx"
选项o,only-matching : 只显示匹配PATTERN 部分。
相似回答