grep regex只在一行输出多个匹配项

时间:2016-10-15 23:29:32

标签: regex grep text-processing

我想在一行中搜索多个匹配项,并使用grep

仅输出匹配的单词
alias host='echo -e "Connecting to host   10.10.11.120\n===================";ssh root@10.10.11.120'
alias host1='echo -e "Connecting to host   10.10.11.121\n===================";ssh root@10.10.11.121'
alias host2='echo -e "Connecting to host   10.10.11.122\n===================";ssh root@10.10.11.122'
alias host3='echo -e "Connecting to host   10.10.11.123\n===================";ssh root@10.10.11.123'

我希望grep只输出主机名和IP地址,如

host 10.10.11.120
host1 10.10.11.121
host2 10.10.11.122
host3 10.10.11.123

2 个答案:

答案 0 :(得分:0)

grep 匹配。它没有修改

尝试sed

sed 's/.*ssh root@/host /' 's/'//' myscript.sh

答案 1 :(得分:0)

使用greppcre,可以提取所需的字符串

$ grep -oP 'alias \K[^=]+|@\K[0-9.]+' ip.txt 
host
10.10.11.120
host1
10.10.11.121
host2
10.10.11.122
host3
10.10.11.123

但是,每个提取的字符串都在单独的行中,因此可以使用其他命令来连接它们,例如:

$ grep -oP 'alias \K[^=]+|@\K[0-9.]+' ip.txt | paste - -
host    10.10.11.120
host1   10.10.11.121
host2   10.10.11.122
host3   10.10.11.123


或者,也可以使用单个perl命令:

$ perl -pe 's/alias (host\d*).*@([\d.]+).*/$1 $2/' ip.txt 
host 10.10.11.120
host1 10.10.11.121
host2 10.10.11.122
host3 10.10.11.123