Bash怎么逐行读取一个文件
在 Linux、OSX、 *BSD 或者类 Unix 系统下你可以使用 while..do..done 的 bash 循环来逐行读取一个文件。下面跟着我一起来了解一下在 Linux 或类 UNIX 系统下如何使用 KSH 或 BASH shell 逐行读取一个文件吧。
Bash逐行读取一个文件 方法
对于 bash、ksh、 zsh 和其他的 shells 语法如下
while read -r line; do COMMAND; done < input.file
通过 -r 选项传递给 read 命令以防止阻止解释其中的反斜杠转义符。
在 read 命令之前添加 IFS= 选项,来防止首尾的空白字符被去掉。
while IFS= read -r line; do COMMAND_on $line; done < input.file
这是更适合人类阅读的语法:
#!/bin/bashinput="/path/to/txt/file"while IFS= read -r vardo echo "$var"done < "$input"
示例
下面是一些例子:
#!/bin/kshfile="/home/vivek/data.txt"while IFS= read linedo # display $line or do somthing with $line echo "$line"done <"$file"
在 bash shell 中相同的例子:
#!/bin/bashfile="/home/vivek/data.txt"while IFS= read -r linedo # display $line or do somthing with $line printf '%s
' "$line"done <"$file"
你还可以看看这个更好的:
#!/bin/bashfile="/etc/passwd"while IFS=: read -r f1 f2 f3 f4 f5 f6 f7do # display fields using f1, f2,..,f7 printf 'Username: %s, Shell: %s, Home Dir: %s
' "$f1" "$f7" "$f6"done <"$file"
示例输出:
图01:Bash 脚本:读取文件并逐行输出文件Bash 脚本:逐行读取文本文件并创建为 pdf 文件
我的输入文件如下(faq.txt):
我的 bash 脚本:
技巧:从 bash 变量中读取
让我们看看如何在 Debian 或者 Ubuntu Linux 下列出所有安装过的 php 包,请输入:
示例输出:
你现在可以从 $list 中看到它们,并安装这些包:
示例输出:
终娣气滞: 对于 bash、ksh、 zsh 和其他的 shells 语法如下 while read -r line; do COMMAND; done < input.file通过 -r 选项传递给 read 命令以防止阻止解释其中的反斜杠转义符.在 read 命令之前添加 IFS= 选项,来防止首尾的空白字符被去掉.while IFS...
杜尔伯特蒙古族自治县15835818387: bash如何按行读取文件并处理 - ?
终娣气滞: 用sed行编辑器来完成这个操作, #"a\"在指定的行(后面)添加一行或多行: sed "/^cflags = xxxxxx xxxx xx/a\#-fno"
杜尔伯特蒙古族自治县15835818387: Shell如何实现从文件中的第n行开始读取记录? - ?
终娣气滞: 好多命令都能实现,head, tail, sed, awk等,比如 awk 'NR > n' datafile.dat | (whaterver you want to do) 不过应该也是一行行读过去,丢掉(或者说不予处理)跳过的行 你要用文件指针,那估计你得自己写个程序了;实现你的功能不难,c程序,几十行足够
杜尔伯特蒙古族自治县15835818387: bash中,我想匹配文件的某行,匹配到该行以后,将该行和下面的几行输出到另外一个文件,怎么实现? - ?
终娣气滞: 用sed循环匹配输出比较简便,一行代码搞定.sed -n '/EXEC/{:a;p;/;/q;n;ba}' $1 >2稍作说明:-n 禁止自动打印,只有通过命令p打印./EXEC/ 匹配含有EXEC的行.:a 设置跳转标签a/;/q 匹配含有分号的行,匹配到了通过命令q退出sed,不再继...
杜尔伯特蒙古族自治县15835818387: shell如何把多行内容输出到一个文件? - ?
终娣气滞: 一般日志这种都应该是一行的,你把终端屏幕缩小,并且全屏,然后在看一下.读取文件的每一行内容并输出 写法一:#!/bin/bash while read line do echo $line done 写法二:#!/binbash cat file(待读取的文件) | while read line do echo $line done 写法三:for line in `cat file(待读取的文件)` do echo $line done
杜尔伯特蒙古族自治县15835818387: 请教shell的读取文件内容 - ?
终娣气滞: 请教shell的读取文件内容 我有个文件如test,内容为:(一行或多行) db_09_11.tgz db_09_12.tgz db_09_13.tgz.....如果一行行读取其中的内容?我的用法是,得到这个test,读取里面的内容(一行或多行),每读一行后就对如读到db_09_11.tgz就进行其它的操作#!/bin/bash cat test | while read line do echo $line done
杜尔伯特蒙古族自治县15835818387: 求一句话bash代码:读取一个文件,如果内容为0,则将100写回原文件,反之将0写回. - ?
终娣气滞: [ "`cat file`" -eq 0 ] && echo 100 >file || echo 0 > file
杜尔伯特蒙古族自治县15835818387: 如何用shell脚本读取文件的内容 - ?
终娣气滞: #!/bin/sh for i in `cat abc.txt` do copy -f /old/$i /new &> /dev/null done
杜尔伯特蒙古族自治县15835818387: 如何使用bash shell 实现连个文件的内容对比 - ?
终娣气滞: 1>Diff命令的功能 Linux中Diff命令的功能为逐行比较两个文本文件,列出其不同之处.它对给出的文件进行系统的检查,并显示出两个文件中所有不同的行,不要求事先对文件进行排序.2>语法 diff [options] file1 file2 该命令告诉用户,为了使两...
杜尔伯特蒙古族自治县15835818387: shell编程用while循环怎么把文件信息逐行显示出来 - ?
终娣气滞: #!/bin/bash while read line;do echo $line done