簡體   English   中英

如何檢查值是否包含 bash 中的字符

[英]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`
  • sed 命令將用一個空格替換逗號。
  • 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.

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