Linux 在shell脚本中用空格替换逗号

Linux 在shell脚本中用空格替换逗号,linux,bash,shell,Linux,Bash,Shell,使用shell脚本将逗号替换为空格 考虑到以下输入: Test,10.10.10.10,"80,22,3306",connect 我需要使用bash脚本获得下面的输出 Test 10.10.10.10 "80,22,3306" connect 如果您有gawk,可以使用FPAT(字段模式),将其设置为正则表达式 awk -v FPAT='([^,]+)|(\"[^"]+\")' '{ for(i=1;i<=NF;i++) { printf "%s ",$i } }' <<&

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

考虑到以下输入:

Test,10.10.10.10,"80,22,3306",connect
我需要使用
bash
脚本获得下面的输出

Test 10.10.10.10 "80,22,3306" connect

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

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

awk-v FPAT='([^,]+)|(\“[^”]+\””{for(i=1;i如果您有gawk,可以使用FPAT(字段模式),将其设置为正则表达式

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

awk-vfpat='([^,]+)|(\“[^”]+\””{for(i=1;i假设您可以从文件中读取输入,这是有效的

#!/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
!/usr/bin/bash
当读取-r行时;执行
declare-a begin=$(echo$行| awk-F'''{print$1}'| tr','')
declare-a end=$(echo$行| awk-F''''{print$3}'| tr','')
declare-a middle=$(echo$行| awk-F'“{print$2}”)
回显“${begin[@]}\”${middle[@]}\“${end[@]}”
完成

编辑:我明白了,您希望在端口号之间保留逗号。我已经编辑了脚本。

假设您可以从文件中读取输入,这是可行的

#!/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
!/usr/bin/bash
当读取-r行时;执行
declare-a begin=$(echo$行| awk-F'''{print$1}'| tr','')
declare-a end=$(echo$行| awk-F''''{print$3}'| tr','')
declare-a middle=$(echo$行| awk-F'“{print$2}”)
回显“${begin[@]}\”${middle[@]}\“${end[@]}”
完成

编辑:我明白了,您希望在端口号之间保留逗号。我已经编辑了脚本。

考虑到您的输入文件是否与示例所示相同,那么下面的sed可能也会对您有所帮助

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

考虑到您的输入文件是否与所示示例相同,那么下面的sed也可能对您有所帮助

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

你尝试过什么?什么不起作用?因为你在一个字段
“80,223306”
中有逗号,你最好对某些编程语言(例如python)使用csv解析器然后用您实际需要的分隔符发出字段。您尝试了什么?什么不起作用?因为其中一个字段
“80,223306”
中有逗号,您最好对某些编程语言(例如python)使用csv解析器然后用您实际需要的分隔符发出字段。OP不可能只希望它对给定的单个精确输入有效。OP不可能只希望它对给定的单个精确输入有效。