shell 給字串增加單引號,並移除字串中多餘的空格

进取發表於2024-03-11

用到的命令:

  1. echo 輸出字串
  2. tr 常用於處理字串間隔,例如將空格分割替換為逗號分割;刪除多個連續的空格等等
  3. sed 也是用於字串處理。如字串替換,也可做字串刪除
  4. awk 也用於字串處理。如將字串按照空格等分隔符,分成好幾列,按需輸出某一列的值;字元計數,統計次數;複雜的字串處理等。

案例
例如:將 “ key1 key2 key3 ” 這個字串的分隔符變更為"," ,並刪除多餘的空格,同時給每個元素都加上單引號 ''.

`1. 首先將多個空格壓縮為一個空格。使用命令 tr -s
echo " key1 key2 key3 " | tr -s ' '
key1 key2 key3

  1. 現在就可以給元素加上''單引號了,同時加上,逗號作為分隔符。awk -F 可以指定字串的分隔符,不指定預設使用空格分割。\047是'單引號對應的ascii碼的值。最後的"" 是一個空字串。這裡使用 print "" 的目的通常是為了在輸出中新增一個換行符,因為 print 函式在列印文字後會自動新增一個換行符。
    echo " key1 key2 key3 " | tr -s ' '| awk '{for(i=1; i<=NF;i++) printf("\047%s\047,", $i);print ""}'
    'key1','key2','key3',

  2. 最後,刪除多餘的逗號 , 。我們使用sed 來實現。

    • s/,*//:這個操作匹配字串開頭的零個或多個逗號(,*),並替換它們為空字串(即刪除它們)。
    • s/,$//:這個操作匹配字串末尾的零個或多個逗號(,$),並同樣替換它們為空字串。

echo " key1 key2 key3 " | tr -s ' '| awk '{for(i=1; i<=NF;i++) printf("\047%s\047,", $i);print ""}'| sed 's/^,//;s/,$//'
'key1','key2','key3'`

完整過程:

tr 其他常見用法:
tr -d ' ' 刪除字串中的單個或多個連續的空格
tr ' ', ',' 將字串的空格替換為 ','逗號

相關文章