我有要读入Bash数组的file.txt文件。然后,我需要删除空格,双引号以及每个条目中除第一个逗号以外的所有内容。这是我走了多远:
$ cat file.txt
10,this
2 0 , i s
30,"all"
40,I
50,n,e,e,d,2
60",s e,e"
$ cat script.sh
#!/bin/bash
readarray -t ARRAY<$1
ARRAY=( "${ARRAY[@]// /}" )
ARRAY=( "${ARRAY[@]//\"/}" )
for ELEMENT in "${ARRAY[@]}";do
echo "|ELEMENT|$ELEMENT|"
done
$ ./script.sh file.txt
|ELEMENT|10,this|
|ELEMENT|20,is|
|ELEMENT|30,all|
|ELEMENT|40,I|
|ELEMENT|50,n,e,e,d,2|
|ELEMENT|60,se,e|
除逗号情况外,哪种效果都很好。我知道有很多方法可以给这只猫换皮,但是由于这是其中较大的脚本,所以我真的很想使用参数替换到达此处:
|ELEMENT|10,this|
|ELEMENT|20,is|
|ELEMENT|30,all|
|ELEMENT|40,I|
|ELEMENT|50,need2|
|ELEMENT|60,see|
通过参数替换可以做到这一点吗?
@Jeff-遍历数组将是我正在研究的较大脚本中实现的噩梦。
—
乔恩·雷德
@JonRed我不知道您在做什么,因此您很可能没有选择的余地,但是通常,当您发现自己在shell中进行如此复杂的字符串杂技时,这很好地表明了您应该使用实际的编程语言。Shell并非设计为一种编程语言,虽然可以用作一种编程语言,但对于更复杂的事情来说,这并不是一个好主意。我强烈建议您考虑改用perl或python或任何其他脚本语言。
—
terdon
@terdon有趣的是,在阅读这篇文章之前,我已经对我的同事说了几乎完全相同的话。我基本上说过,这是此脚本的最终版本,任何进一步的要求都将需要在Perl中进行重写。所以,我绝对同意
—
Jon Red
awk
或sed
进行数据处理呢?