读取包含字符串的行(Bash)

时间:2015-04-22 12:03:47

标签: string bash file variables contain

我有一个文件,它的内容如下:

Device: name1
random text
Device: name2
random text
Device: name3
random text

我有一个变量:MainComputer

我想得到的(对于每个名字,我有40个名字):

   MainComputer -> name1
   MainComputer -> name2
   MainComputer -> name3

我有什么:

var="MainComputer"   
var1=$(awk '/Device/ {print $3}' file)
echo "$var -> $var1"

这只给出箭头" - >"以及第一个变量的链接,我希望它们用于其他40个变量...

非常感谢!

2 个答案:

答案 0 :(得分:8)

让我告诉你awk

$ awk '/Device/ {print $2}' file
name1
name2
name3

这将在包含Device的行上打印第二个字段。如果您想检查它们是否以设备开头,则可以使用^Device:

更新

要获得您在编辑过的问题中提及的输出,请使用:

$ awk -v var="MainComputer" '/Device/ {print var, "->", $2}' a
MainComputer -> name1
MainComputer -> name2
MainComputer -> name3

它通过-v提供变量名称,然后打印该行。

查找有关您的脚本的一些评论:

file="/scripts/file.txt"
while read -r line
do
     if [$variable="Device"]; then # where does $variable come from? also, if condition needs tuning
     device='echo "$line"' #to run a command you need `var=$(command)`
echo $device #this should be enough
fi
done <file.txt #why file.txt if you already stored it in $file?

检查bash string equality,了解[[ "$variable" = "Device" ]]应该是语法(或类似)的方式。

另外,您可以说while read -r name value,以便$value包含第二个值。

答案 1 :(得分:5)

或者,让我告诉你grep和cut:

$ grep "^Device:" $file | cut "-d " -f2-