读取包含String的行(Bash)

Omn*_*nom 4 string variables bash file contain

我有一个文件,它是这样的:

Device: name1
random text
Device: name2
random text
Device: name3
random text
Run Code Online (Sandbox Code Playgroud)

我有一个变量:MainComputer

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

   MainComputer -> name1
   MainComputer -> name2
   MainComputer -> name3
Run Code Online (Sandbox Code Playgroud)

是)我有的:

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

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

不管怎么说,还是要谢谢你!

fed*_*qui 9

我来介绍你awk:

$ awk '/Device/ {print $2}' file
name1
name2
name3
Run Code Online (Sandbox Code Playgroud)

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

更新

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

$ awk -v var="MainComputer" '/Device/ {print var, "->", $2}' a
MainComputer -> name1
MainComputer -> name2
MainComputer -> name3
Run Code Online (Sandbox Code Playgroud)

它提供变量名称-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?
Run Code Online (Sandbox Code Playgroud)

检查bash字符串相等性以查看[[ "$variable" = "Device" ]]语法(或类似)应该如何.

此外,你可以说while read -r name value,所以$value它将包含第二个值.


Dan*_*erg 5

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

$ grep "^Device:" $file | cut "-d " -f2-
Run Code Online (Sandbox Code Playgroud)

  • @fedorqui:他们有什么不同?两者都将导致与`cut`相同的参数值.`-d""`对我来说更具可读性.但从"bash"的角度来看,两者都是一样的.(对于`cygwin`的`cut.exe`可能不是这样,如果从`cmd`运行.`cmd`将```传递给子进程.) (2认同)