Linux
如何選擇每行的第一個單詞並將其歸因於 bash 腳本中的數組
我想創建一個 bash 腳本,它從文本文件中選擇“:”字元之前的每一行的第一個單詞,並將其輸出到一個數組中(1 個插槽用於 1 行)。
現在我有這個:
while read p; do arr+=$p | sed -r 's///' done <test.txt
我不知道在 sed 的條件下放什麼。
我有這個正則表達式:
/^([^:])+/gm
不需要 subshell 和 sed,只需使用參數擴展:
while read p ; do arr+=( "${p%%:*}" ) done < test.txt
在一個命令中刪除所有子字元串可能會更快
while read p ; do arr+=("$p") done < test.txt arr=("${arr[@]%%:*}")
使用
bash
4 或更高版本,您可以使用readarray
直接讀入數組:readarray -t arr < <( awk -F ':' '{ print $1 }' file.in )
awk
程式碼在程序替換中執行並提供數據。它只是提取每個:
分隔線的第一個欄位。
file.in
帶有as 的範例roses are:red violets:are blue sugar is:sweet and so:are you:.
$ readarray -t arr < <( awk -F ':' '{ print $1 }' file.in ) $ printf '"%s"\n' "${arr[@]}" "roses are" "violets" "sugar is" "so" "you"