Linux

如何選擇每行的第一個單詞並將其歸因於 bash 腳本中的數組

  • May 5, 2018

我想創建一個 bash 腳本,它從文本文件中選擇“:”字元之前的每一行的第一個單詞,並將其輸出到一個數組中(1 個插槽用於 1 行)。

現在我有這個:

while read p; 
do
 arr+=$p | sed -r 's///'
done <test.txt

我不知道在 sed 的條件下放什麼。

我有這個正則表達式:

/^([^:])+/gm

不需要 subshel​​l 和 sed,只需使用參數擴展:

while read p ; do
 arr+=( "${p%%:*}" )
done < test.txt

在一個命令中刪除所有子字元串可能會更快

while read p ; do
   arr+=("$p")
done < test.txt
arr=("${arr[@]%%:*}")

使用bash4 或更高版本,您可以使用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"

引用自:https://unix.stackexchange.com/questions/441171