您好我正在从.csv文件中读取并使用
echo $line
将该记录的单元格内容打印到屏幕上,但也会打印逗号,即
1,2,3,a,b,c
我真正想要的地方
1 2 3 a b c
检查echo手册页没有省略逗号的选项,所以有没有人有一个漂亮的bash技巧来做到这一点?
答案 0 :(得分:3)
使用bash替换:
$ echo "${line//,/ }"
1 2 3 a b c
请注意双斜线的重要性:
$ echo "${line/,/ }"
1 2,3,a,b,c
也就是说,单一的只会替换第一次出现。
为了完整性,请检查其他方法:
$ sed 's/,/ /g' <<< "$line"
1 2 3 a b c
$ tr ',' ' ' <<< "$line"
1 2 3 a b c
$ awk '{gsub(",", " ")}1' <<< "$line"
1 2 3 a b c
答案 1 :(得分:1)
如果由于可移植性问题需要更符合POSIX标准的内容,echo "$line" | tr ',' ' '
也适用。
答案 2 :(得分:0)
如果必须将字段值用作分隔值,则可以使用 IFS 内置bash变量。 您可以使用“,”值设置它,以指定用于从.csv文件读取的读取命令的字段分隔符。
ORIG_IFS="$IFS"
IFS=","
while read f1 f2 f3 f4 f5 f6
do
echo "Follow fields of record as separated variables"
echo "f1: $f1"
echo "f2: $f2"
echo "f3: $f3"
echo "f4: $f4"
echo "f5: $f5"
echo "f6: $f6"
done < test.csv
IFS="$OLDIFS"
通过这种方式,您可以为行/记录的每个字段添加一个变量,您可以根据需要使用它。
注意:以避免意外行为,请记住将原始值设置为IFS变量