在shell脚本

时间:2017-08-25 07:05:03

标签: linux bash shell

使用shell脚本将逗号替换为空格

给出以下输入:

Test,10.10.10.10,"80,22,3306",connect

我需要使用bash脚本

获得低于输出的值
Test 10.10.10.10 "80,22,3306" connect

4 个答案:

答案 0 :(得分:2)

如果您有gawk,可以使用FPAT(字段模式),将其设置为正则表达式。

awk -v FPAT='([^,]+)|(\"[^"]+\")' '{ for(i=1;i<=NF;i++) { printf "%s ",$i } }' <<< "Test,10.10.10.10,\"80,22,3306\",connect"

我们将FPAT设置为基于任何不是逗号的内容以及用引号括起来的数据以及任何非引号的内容来分隔文本。然后我们打印所有字段,中间有空格。

答案 1 :(得分:0)

假设您可以从文件中读取输入,这可以正常工作

#!/usr/bin/bash
while read -r line;do
declare -a begin=$(echo $line | awk -F'"' '{print $1}' | tr "," " " )
declare -a end=$(echo $line |awk -F'"' '{print $3}' | tr "," " " )
declare -a middle=$(echo $line | awk -F'"' '{print $2}' )

echo "${begin[@]} \"${middle[@]}\" ${end[@]}"
done < connect_file

编辑:我明白了,你想在端口号之间保留逗号。我编辑了剧本。

答案 2 :(得分:0)

考虑到你的Input_file是否与显示的样本相同,那么关注sed也可以帮助你。

sed 's/\(.[^,]*\),\([^,]*\),\(".*"\),\(.*\)/\1 \2 \3 \4/g'   Input_file

答案 3 :(得分:0)

echo Test,10.10.10.10,\"80,22,3306\",connect|awk '{sub(/,/," ")gsub(/,"80,22,3306",/," \4280,22,3306\42 ")}1'

Test 10.10.10.10 "80,22,3306" connect