gpt4 book ai didi

regex - 如何在 awk 命令中支持不常见的字符

转载 作者:太空宇宙 更新时间:2023-11-04 05:03:35 25 4
gpt4 key购买 nike

以下 bash 脚本 - 读取 Password_from_csv.bash 执行以下操作

  1. 读取 CSV 密码名称和 CSV 密码值
  2. 打印每行 CSV 的 CSV 密码名称和 CSV 密码值(密码值来自第二行)

请看一下 CSV 中的第二行,密码很简单,只有 a-z数字字符

因此,如果我运行脚本,所有密码名称和值都将打印为示例 1

但是当我们在脚本中设置 CSV_LINE=3 来读取第三个 CSV 行时,该脚本给我们以下错误,因为找不到命令,因为不常见的字符为“$”或“*”或“/”或“\”,如示例2

所以

请建议如何更改/修复我的 bash 脚本中的 awk 语法以支持不常见的字符并打印 CSV 中第三行的密码?

 more readPassword_from_csv.bash

#!/bin/bash



CSV_LINE=2

eval $(awk -v line=$CSV_LINE -F, 'NR==1 { for (i=1; i<=NF; i++) sn[i]=$i }
NR==line { for (i=1; i<=NF; i++) print sn[i] "=" $i ; exit }' all_passwords.CSV )




echo CSV_LINE=$CSV_LINE
echo Password1=$Password1
echo Password1=$Password2
echo Password1=$Password3
echo Password1=$Password4
echo Password1=$Password5
echo Password1=$Password6
echo Password1=$Password7
echo Password1=$Password8

.

   more  all_passwords.CSV
Password1,Password2,Password3,Password4,Password5,Password6,Password7,Password8
hdehbcr,fre435fr,443f4,544fr4fr4,454534rf4,r3443tr,5345rd,545trr34
&^#GTR$@H,@Y^%ER$%*&*UJ,**U&^#%%@$^&//\\,^T%!#&^YG.+___KI*&HHTY,%%@$#!%^#&,P/\06E87*UHG11#,edehu234#@!&,~hum&T%6e4

.

另一个 CSV 示例,在本例中我们有空格:

      Password1,Password2,Password3,Password4,Password5,Password6,Password7,Password8
&^#G TR / / $@H,@Y^%" E "R$%*&*UJ,**U&^#%%@$^&//\\,^T%!#&^YG.+___KI*&HHTY,%%@$#!%^#&,P/\06E87*UHG11#,edehu234#@!&,~hum&T%6e4

示例1

读取 CSV 中的第二行 ( CSV_LINE=2 ) 时的脚本输出示例

  ./readPassword_from_csv.bash 
CSV_LINE=2
Password1=hdehbcr
Password1=fre435fr
Password1=443f4
Password1=544fr4fr4
Password1=454534rf4
Password1=r3443tr
Password1=5345rd
Password1=545trr34

示例2

当我读取 CSV 中的第三行 ( CSV_LINE=3 ) 时的脚本输出示例

  ./readPassword_from_csv.bash 



./readPassword_from_csv.bash
./readPassword_from_csv.bash: line 8: ^#%%@$^: command not found
./readPassword_from_csv.bash: line 8: //\: No such file or directory
./readPassword_from_csv.bash: line 8: ^YG.+___KI*: command not found
./readPassword_from_csv.bash: line 8: HHTY: command not found
./readPassword_from_csv.bash: line 8: T%6e4: command not found
CSV_LINE=3
Password1=
Password1=
Password1=
Password1=
Password1=
Password1=
Password1=
Password1=

最佳答案

您需要在 eval + awk 命令中使用引号:

eval $(awk -v line=$CSV_LINE -F, 'NR==1 { for (i=1; i<=NF; i++) sn[i]=$i }
NR==line { for (i=1; i<=NF; i++) print sn[i] "=\"" $i "\""; exit }' all_passwords.CSV )

但是这里可以有更好的选择来使用eval(例如间接引用)。

更新:

不使用 eval 的替代纯 BASH 解决方案:

CSV_LINE=2
vars=()
c=1
while IFS=, read -ra arr; do
if ((c==1)); then
vars+=("${arr[@]}")
elif ((c==CSV_LINE)); then
for ((i=0; i<${#arr[@]}; i++)); do
declare ${vars[$i]}="${arr[$i]}"
done
fi
((c++))
done < all_passwords.csv

关于regex - 如何在 awk 命令中支持不常见的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24904064/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com