从Bash中具有特定模式的文件中获取行

时间:2018-03-22 14:27:01

标签: linux bash shell file

我有这个文件:

this is line 1 192.168.1.1
this is line 2 192.168.1.2
this is line 3 192.168.1.2
this is line 4 192.168.1.1
this is line 5 192.168.1.2

我想在bash脚本中获取所有包含标签“192.168.1.1”的行(带标签)。通过这种方式,我会得到:

this is line 1 192.168.1.1
this is line 4 192.168.1.1

但我不想要这个结果:

this is line 1 192.168.1.1 this is line 4 192.168.1.1

我用sed尝试了但没有成功:

var='192.168.1.1'
body=`sed -n -e '/$var/p' $file`
echo $body

事先谢谢!

4 个答案:

答案 0 :(得分:1)

awk救援!

$ awk -v var='192.168.1.1' '$NF==var' file

this is line 1 192.168.1.1
this is line 4 192.168.1.1

答案 1 :(得分:0)

关注sed可能对您有帮助。

var="your_ip"
sed -n "/$var/p"  Input_file

或者awk以下内容对此有帮助。

var="your_ip"
awk -v var="$var" 'var==$NF'  Input_file

答案 2 :(得分:0)

一个简单的grep命令可以做到这一点:

grep 192.168.1.1 filename

或者更复杂的“grep命令可以执行此操作并将其写入另一个文件:

grep 192.168.1.1 filename > new_filename

希望这有帮助!

答案 3 :(得分:0)

假设数据格式的定义如你所说:

"this is line <seq> <ip>" 
你可以做到这一点:

cat file | egrep "192.168.0.1$"