【问题标题】:How to read from text file with colon in bash如何在bash中用冒号读取文本文件
【发布时间】:2019-09-27 08:40:51
【问题描述】:

我的用户名和密码存储在带有双点的 .txt 文件中,我想从中读取并将前半部分存储在变量中,后半部分存储在变量中。

示例:kmyghz1:aa12345bb12345cckmyghz1

cat ./examples/secrets.txt | while  IFS=':' | read variable1 variable2 do \
        echo $variable1 \
        echo $variable2 \
done

谁能帮忙?

【问题讨论】:

  • 应该在发帖之前编辑那个“色情”。 ;-)
  • @DevSolar 哈哈,我把它当作天才的例子:D
  • @DevSolar 实际上是“ cat ./instabut/examples/secrets.txt ”
  • 那个“双点”实际上叫做“冒号”。这就是为什么带有点和逗号(“;”)的变体是一个分号冒号。
  • @DevSolar 是的,我总是对那个和那个感到困惑

标签: linux bash shell automation


【解决方案1】:

IFS=: 本身不是命令;这是read 命令的预命令分配。删除分隔它们的管道符号 (|)。您还缺少do 关键字前面的分号或换行符。

while IFS=: read variable1 variable2; do
    echo "$variable1"
    echo "$variable2"
done < ./examples/secrets.txt

反斜杠是不必要的,并且应该始终引用参数扩展。

【讨论】:

  • 猫 ./instabut/examples/secret.txt |而 IFS=: 读取 LINE 变量 1 变量 2;做 \ echo "$variable1" echo "$variable2" 完成
  • 我还是 ./script.sh: line 2: syntax error: unexpected end of file
  • 猫 ./instabut/examples/usernames.txt |而 IFS=';'读取用户名密码;做 echo $userName echo $password done
  • 你在done 之前缺少; :`cat ./instabut/examples/usernames.txt |而 IFS=';'读取用户名密码;做回声$用户名回声$密码;完成
  • 这样,我的命令行就卡在了那个上面并且不做任何事情:/
【解决方案2】:

感谢您的意见,这是对我有用的正确答案!

while IFS=: read -r userName password
do
 echo "$userName"
 echo "$password"
done < ./instabut/examples/secret.txt 

【讨论】:

  • 我冒昧地把事情弄乱了一点。您可能会发现新方法更容易阅读...?!?在任何情况下,它都不需要分号 (;) 和 cat...
  • @DevSolar ,你为我节省了 4 个字节。谢谢你:)
  • 更多的是关于结构良好且可读性强的代码,而不是做不必要的事情(比如cat...的大多数用法),但不客气。 ;-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-29
  • 2015-08-06
  • 2017-12-20
  • 2012-02-14
  • 2014-10-26
  • 1970-01-01
  • 2019-08-03
相关资源
最近更新 更多