簡體   English   中英

在Shell腳本中用空格替換逗號

[英]Replace comma with space in shell script

使用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"

我們將FPAT設置為根據非逗號,引號內的數據以及非引號內的數據來分隔文本。 然后,我們在所有字段之間打印一個空格。

假設您可以從文件中讀取輸入,則可以正常工作

#!/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

編輯:我看到,您要保留端口號之間的逗號。 我已經編輯了腳本。

考慮一下您的Input_file是否與顯示的示例相同,那么按照sed進行操作也可能會幫助您。

sed 's/\(.[^,]*\),\([^,]*\),\(".*"\),\(.*\)/\1 \2 \3 \4/g'   Input_file
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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM