【问题标题】:how to read file line by line in shell script and store each line in a variable如何在shell脚本中逐行读取文件并将每一行存储在变量中
【发布时间】:2010-09-15 17:27:16
【问题描述】:

我是 unix 新手。我必须编写一个shell脚本,逐行读取文件并将其存储在一个单独的变量中。我的文本文件内容有多个源路径和一个目标路径。 像这样::

source_path=abc/xyz
source_path=pqr/abc
desination_path=abcd/mlk

源路径的数量可以变化。 我没有太多的 Unix 经验。任何人都可以帮助我实现这一目标。这将非常有帮助。

提前致谢

【问题讨论】:

  • 您想将所有的 soure_path 存储在一个变量中,比如说用冒号分隔?
  • 不不,我想将每条路径存储在一个单独的变量中

标签: file shell unix


【解决方案1】:
sourcePaths=( $(grep source_path myfile |cut -d= -f2) )
destPath=`grep destination_path myfile |cut -d= -f2`

$sourcePathssource_paths 的数组。您不需要将每个 source_path 存储在单独的变量中。

您可以遍历数组并对每个source_path 执行您想要的操作。例如:

for i in "${sourcePaths[@]}"
do
    echo $i
done

【讨论】:

    【解决方案2】:

    有点hacky,但这应该可以:

    old_IFS="$IFS"
    IFS="="
    
    while read left right ; do
      echo "Left side: $left"
      echo "Right side: $right"
    done < $input_file
    
    IFS="$old_IFS"
    

    如果您想摆脱$right 中的",您可以执行right_content=$(sed 's|"\(.*\)"|\1|' &lt;&lt;&lt;$right) 之类的操作。 &lt;&lt;&lt;$right 几乎与 echo $right 一样,sed 命令将删除前导和尾随 "(如果不存在引号,则字符串将按原样传递)。

    【讨论】:

    • :thanx,但你认为它真的适用于多源路径并将其存储在不同的变量中
    • :source_path 的内容不一定是 ""。
    【解决方案3】:
        #!/bin/sh
    #path to config file
    CONFIG_FILE=/tmp/conf.log
    #check if file exist
    if [[ -f $CONFIG_FILE ]]; then
    #use source filename or .file name
        . $CONFIG_FILE
    #test variable
    echo "source is $source"
    echo "dest is $dest"
    fi
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-07
      • 1970-01-01
      • 2021-10-18
      • 2021-06-02
      • 2020-06-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多