我想在一行中搜索多个匹配项,并使用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
答案 0 :(得分:0)
grep
匹配。它没有修改。
尝试sed
:
sed 's/.*ssh root@/host /' 's/'//' myscript.sh
答案 1 :(得分:0)
使用grep
和pcre
,可以提取所需的字符串
$ 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