Bash 字符串中的条件引用
Bash Conditional Quote in String
我在 bash 中解析了一个 CSV 文件,对于一列,某些行具有多个值。
例如,包含多个值的一行可能看起来像
name,12,120,east,"sw1,sw2,sw3"
但并非所有行都有。有些可能看起来像
name,10,141,west,sw5534a
我想要做的是,如果该列中有引号,则将其删除并将变量设置为 sw1,sw2,sw3
脚本的相关部分:
#!/bin/bash
INPUT=file.csv
OLDIFS=$IFS
IFS=,
[ ! -f $INPUT ] && { echo "$INPUT file not found"; exit 99; }
while read name building id region parents
do
echo "
....snip....
parents $parents"
我想要 $parents 的输出应该是 sw1,sw2,sw3
但现在它显示为 "sw1,sw2,sw3"
如果该列有一个逗号以删除第一个和最后两个字符,我试过在有条件的情况下使用正则表达式匹配,但我无法让它工作。要么它会删除第一个 s
和最后一个 3
要么它会出错。
感谢任何建议!
您可以使用子字符串替换删除 $parents
变量中 "
字符的两个实例:
echo ${parents//\"/}
这会将所有 "
个字符替换为空字符串。
parents="${parents#\"}"
parents="${parents%\"}"
这将删除第一个字符(如果是引号)和最后一个字符(如果是引号)。如果它们不是引号,它们将保持不变。
我在 bash 中解析了一个 CSV 文件,对于一列,某些行具有多个值。 例如,包含多个值的一行可能看起来像
name,12,120,east,"sw1,sw2,sw3"
但并非所有行都有。有些可能看起来像
name,10,141,west,sw5534a
我想要做的是,如果该列中有引号,则将其删除并将变量设置为 sw1,sw2,sw3
脚本的相关部分:
#!/bin/bash
INPUT=file.csv
OLDIFS=$IFS
IFS=,
[ ! -f $INPUT ] && { echo "$INPUT file not found"; exit 99; }
while read name building id region parents
do
echo "
....snip....
parents $parents"
我想要 $parents 的输出应该是 sw1,sw2,sw3
但现在它显示为 "sw1,sw2,sw3"
如果该列有一个逗号以删除第一个和最后两个字符,我试过在有条件的情况下使用正则表达式匹配,但我无法让它工作。要么它会删除第一个 s
和最后一个 3
要么它会出错。
感谢任何建议!
您可以使用子字符串替换删除 $parents
变量中 "
字符的两个实例:
echo ${parents//\"/}
这会将所有 "
个字符替换为空字符串。
parents="${parents#\"}"
parents="${parents%\"}"
这将删除第一个字符(如果是引号)和最后一个字符(如果是引号)。如果它们不是引号,它们将保持不变。