【问题标题】:Extract word from text, assign to variable and use variable in conditions shell scripting从文本中提取单词,分配给变量并在条件 shell 脚本中使用变量
【发布时间】:2021-08-21 13:16:10
【问题描述】:

我有一个文本文件ListOfFiles.txt,其中包含以下值,

ABC_123456_AIRTEL_20210821.csv
ABC_123478_AIRTEL_20210821.csv
ABC_123490_AIRTEL_20210821.csv

我想从文件的上面一行中提取AIRTEL 字,我正在这样做,

while read filename; do
   echo ${filename} | tail -n1 |cut -d -d"." -f1|cut -d "_" -f3
   vers="`${filename} | tail -n1 |cut -d -d"." -f1|cut -d "_" -f3`"
   if [[ "${vers}" == "AIRTEL" ]]
   then
       echo "Yes yes yes"
   else
      echo "no no no"
   fi
   echo "${vers}"
done < ListOfFiles.txt

第一个回显按我的需要返回 AIRTEL,但是当我将它分配给变量并尝试在它变为空白的条件下使用它时。

【问题讨论】:

  • versvars 不一样。
  • 打错字了,谢谢@Tony

标签: bash shell


【解决方案1】:

我认为这应该可行(未经测试)。

ls | while read filename
do
   vers=$( echo ${filename} | cut -d"." -f1 | cut -d "_" -f3 )
   if [[ "${vers}" == "AIRTEL" ]]
   then
       echo "yes yes yes"
   else
      echo "no no no"
   fi
   echo "${vers}"
done < ListOfFiles.txt

【讨论】:

    【解决方案2】:

    您可以在不使用外部命令的情况下实现此目的。 Bash 参数扩展可以做到这一点。

    while read filename; do
       vers="${filename#ABC_*_}" # removing the prefix
       vers="${vers%_*.csv}" # removing the suffix
       if [[ "${vers}" == "AIRTEL" ]]
       then
           echo "Yes yes yes"
       else
          echo "no no no"
       fi
       echo "${vers}"
    done < ListOfFiles.txt
    

    在 bash 手册 read${parameter#word}${parameter%word} 中。

    【讨论】:

    • 这也可以按预期工作!谢谢@Alireza
    猜你喜欢
    • 2023-03-30
    • 2011-11-29
    • 2021-11-24
    • 2014-03-07
    • 1970-01-01
    • 1970-01-01
    • 2014-03-29
    • 2016-07-09
    • 2022-01-09
    相关资源
    最近更新 更多