我有一个包含以下内容的文件:
toto.tata0.titi=any1
toto.tata1.titi=any2
toto.tata2.titi=any2
toto.tata3.titi=any1
toto.tata4.titi=any1
toto.tata5.titi=any2
我想提取所有tata
等于any2
如何只用一个命令(例如sed
)来完成它?
我可以使用2个命令grep
和cut
$ cat file | grep "toto\.[^.]\+\.titi=any2" | cut -d. -f2
tata1
tata2
tata5
答案 0 :(得分:3)
您可以使用awk:
awk -F'=' '$2=="any2"{print $1}' file
toto.tata1.titi
toto.tata2.titi
toto.tata5.titi
如果您只是想要中间部分,那么:
awk -F'[.=]+' '$NF=="any2"{print $2}' fff
tata1
tata2
tata5
答案 1 :(得分:2)
使用sed,您可以搜索以any2
结尾的任何行,并使用两个替换命令,第一个删除所有字符,直到第一个.
,第二个删除下一个.
直到结束:
sed -ne '/any2$/ { s/^[^.]*\.//; s/\..*$//; p }' infile
它产生:
tata1
tata2
tata5