[英]How to check if a value contains characters in bash
我有這樣的價值觀
B146XYZ、G638XYZ、G488xBC
我必須編寫一個 bash 腳本,當它看到逗號時,它必須刪除逗號並添加 7 個空格,如果它看到逗號和一個空格或只是空格(沒有標點符號),則它必須添加 7 個空格才能使所有的它們固定長度。
if [[ $row = *’,’* ]]
then
first= “${ row%%,*}”
echo “${first } “
我嘗試過但無法理解如何為其余標准添加條件,特別是在 G488xBC 等單值條件下掙扎
怎么樣:
sed -E 's/[, ]+/ /g' file
或者像這樣的東西將打印一個填充表,只要沒有字段超過 13 個字符:
awk -F '[,[:space:]]+' \
'{
for (i=1; i<NF; i++) {
printf("%-14s", $i)
}
print $NF
}'
或者在純 bash 中做同樣的事情:
while IFS=$', \t' read -ra vals; do
last=$((${#vals[@]} - 1))
for ((i=0; i<last; i++)); do
printf "%-14s" "${vals[i]}"
done
printf '%s\n' "${vals[last]}"
done
newrow="${row//,/ }"
VALUES=`echo $VALUES | sed 's/,/ /g' | xargs`
有了這個,您現在可以將值以空格分隔的字符串而不是逗號分隔,並由未知數量的空格分隔。
從那里你可以for i in $VALUES; do printf "$i\\t"; done
使用for i in $VALUES; do printf "$i\\t"; done
for i in $VALUES; do printf "$i\\t"; done
使用上面的制表符將為您提供對齊的輸出,以防您的值的長度可能不同。
但是如果你的值總是相同的長度,那么你可以通過這樣做讓它更簡單一點
VALUES=`echo $VALUES | sed 's/,/ /g' | xargs | sed 's/1 space/7 spaces/g'`
echo $VALUES
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.