搜索字符串并仅回显该行?

时间:2012-03-17 03:55:07

标签: bash unix sed awk grep

是否可以搜索字符串,如果存在,只保留该行...整行,而不仅仅是字符串?我有两个逗号分隔的数据变量。我想做的是遍历我的$ data变量并使用它的col2作为搜索项。然后搜索$ example变量,如果找到匹配,则只将一些数据添加到该行。下面这个数据是正确的,但它打印出两次,因为在这种情况下有两个项目。如果不打印任何东西,除非它是一个匹配然后打印整行

,这将是很好的
#!/bin/bash
data="item,thing
item2,thing2"

example="a,lot,of,thing,in,this,csv
big,foot,lives,next,to,me,yikes"

echo "$data" | while IFS=, read -r col1 col2
do
echo "$example" | sed "s/$col1/$col2,$col1/i"                                                                            
done

我已经尝试将col2作为数组键,但我没有成功。也许是因为我在Mac上并且根据我的阅读它附带了旧版本的Bash。

1 个答案:

答案 0 :(得分:1)

如果您不希望sed打印,除非您提出要求,请写下:

... | sed -n "/$col1/{s/$col1/$col2,$col1/i; p}"

我假设i后缀对你的sed方言有意义;这不标准。 -n表示“不自动打印”。 /$col1/寻找模式;当找到它时,执行大括号中的命令 - 你的替代操作,然后'打印线'。

请注意,如果item中出现nitemare,则您的模式$example将匹配{{1}}。