bash文件

来源:互联网 发布:淘宝视频制作软件 编辑:程序博客网 时间:2024/06/06 19:02

while/read/awk

示例:

while read -r i;do
    echo $i | awk -F ':' '{print "#define " "SERVER_"$1" " "\""$2"\""}' >> $sfile;
    echo $i | awk -F ':' '{print "#define " "CLIENT_"$1" " "\""$2"\""}' >> $cfile;
done < version

1) while 条件; do 

        done

2) read 

读取文件的首行并赋值给变量

$ read -r line < file
这一行命令用到了 Bash 的内置命令read,和输入重定向操作符<</code>。read命令从标准输入中读取一行,并将内容保存到变量line中。在这里,-r选项保证读入的内容是原始的内容,意味着反斜杠转义的行为不会发生。输入重定向操作符< file打开并读取文件file,然后将它作为read命令的标准输入。
记住,read命令会删除包含在IFS变量中出现的所有字符,IFS 的全称是 Internal Field Separator,Bash 根据 IFS 中定义的字符来分隔单词。在这里,read命令读入的行被分隔成多个单词。默认情况下,IFS包含空格,制表符和回车,这意味着开头和结尾的空格和制表符都会被删除。如果你想保留这些符号,可以通过设置IFS为空来完成:
$ IFS= read -r line < file
IFS 的变化仅会影响当前的命令,这行命令可以保证读入原始的首行内容到变量line中,同时行首与行尾的空白字符被保留。

4. 依次读入文件每一行

$ while read -r line; do 
 # do something with $line 
done < file
这是一种正确的读取文件内容的做法,read命令放在while循环中。当read命令遇到文件结尾时(EOF),它会返回一个正值,导致循环判断失败终止。记住,read命令会删除首尾多余的空白字符,所以如果你想保留,请设置 IFS 为空值:
$ while IFS= read -r line; do 
 # do something with $line 
done < file
如果你不想将< file放在最后,可以通过管道将文件的内容输入到 while 循环中:
$ cat file | while IFS= read -r line; do 
 # do something with $line 
done

读取文件首行前三个字段并赋值给变量

$ while read -r field1 field2 field3 throwaway; do # do something with $field1, $field2, and $field3 done < file
如果在read命令中指定多个变量名,它会将读入的内容分隔成多个字段,然后依次赋值给对应的变量,第一个字段赋值给第一个变量,第二个字段赋值给第二个变量,等等,最后将剩余的所有字段赋值给最后一个变量。这也是为什么,在上面的例子中,我们加了一个throwaway变量,否则的话,当文件的一行大于三个字段时,第三个变量的内容会包含所有剩余的字段。有时候,为了书写方便,可以简单地用_来替换throwaway变量:
$ while read -r field1 field2 field3 _; do # do something with $field1, $field2, and $field3 done < file
又或者,如果你的文件确实只有三个字段,那可以忽略它:
$ while read -r field1 field2 field3; do # do something with $field1, $field2, and $field3 done < file
3)  awk

awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。

awk -F ':' '{print "#define " "SERVER_"$1" " "\""$2"\""}' : -F 指定分隔符; $n:第n个字段;

0 0