Shell遍历文件的每一行

来自linux中国网wiki
Evan讨论 | 贡献2020年2月3日 (一) 12:21的版本 →‎see also
跳到导航 跳到搜索

原因

由于使用for来读入文件里的行时,会自动把空格和换行符作为一样分隔符,因为当行里有空格的时候,输出的结果会很乱,所以……

得到一个批量删除 redis 脚本

cat  r
del hello_coin_limit_config_1186883712095948803_1
[root@prod-hello-nginx02 evan]# bash  f
del
hello_coin_limit_config_1186883712095948803_1


如何批量 执行 


evan@bsd-latop:~/test % cat  r
del hello_coin_limit_config_1186883712095948803_1
del hello_coin_liiiiiidsafasjfig_1186883712095948803_1
evan@bsd-latop:~/test % cat ff
cat  $1  | while read line
#cat  r  | while read line
do
echo $line
done
evan@bsd-latop:~/test % bash ff  r
del hello_coin_limit_config_1186883712095948803_1
del hello_coin_liiiiiidsafasjfig_1186883712095948803_1





cat  $1  | while read line
#cat  r  | while read line
do
echo $line
done




最终得到一个批量删除redis key 脚本

#!/bin/bash
cat  $1  | while read line
do

redis-cli    -c  -h    172.31.22.218   -p 7000  -a hello $line
redis-cli    -c  -h    172.31.22.218   -p 7001  -a hello   $line
redis-cli    -c  -h   172.31.16.135   -p 7002  -a hello   $line  
redis-cli    -c  -h   172.31.16.135   -p 7003  -a hello  $line
redis-cli    -c  -h   172.31.23.43   -p 7004  -a hello  $line
redis-cli    -c  -h   172.31.23.43   -p 7005  -a hello   $line
done

把所有目录权限修改为755,所有文件为644

再举个实际点的例子(把所有目录权限修改为755,所有文件为644):

# find ./ -type f>filelist
# find ./ -type d>dirlist
# cat dirlist |while read i; do chmod 755 "${i}"; done
# cat filelist |while read i; do chmod 644 "${i}"; done

see also

如上面不行就参考这个shell实现:读文件一行,sed操作文件某一行

其它参考

循环出每一行数据,再分割每个字符 做处理 

    cat file_name | while read line

    do
      echo $line;
      array=(${line///t/ })  
      appkey=${array[0]} 
      file_name=${array[1]}
     
    done;

原文链接:https://blog.csdn.net/yan88888888888888888/article/details/103298561