Shell-Script

如何分解字元串 - Bash

  • September 23, 2016

我有一個具有以下格式的字元串列表。我可以使用哪些命令來提取相應的部分。我正在考慮使用 grep 來提取關鍵字,即:ADD、使用者名(atra522)等。我應該如何解決這個問題?

cop1010 ADD atra522,Allison Track,CT,canada

我知道如何使用 cut 或 awk 通過查找逗號來獲取所有欄位,但我不知道如何使其與第一個欄位“cop1010 ADD atra522”一起使用。

你說bash,所以讓我們用 shell 內置函式來做這一切:

$ inp="cop1010 ADD atra522,Allison Track,CT,canada"
$ IFS=, fields=($inp)
$ echo ${fields[0]}
cop1010 ADD atra522
$ echo ${fields[1]}
Allison Track
$ echo ${fields[2]}
CT
$ echo ${fields[3]}
canada
$ IFS=\  cmd=(${fields[0]})
$ echo ${cmd[0]}
cop1010
$ echo ${cmd[1]}
ADD
$ echo ${cmd[2]}
atra522
$ 

您可以將它們全部設置為變數(而不是回顯它們),並且永遠不需要生成子shell 來執行awkcut或任何其他工具。

您可以使用 awk 的split函式將第一個欄位進一步拆分為一個數組,例如

echo 'cop1010 ADD atra522,Allison Track,CT,canada' | 
 awk -F, '{
   split($1,a,"[ \t]+");
   if (a[2] == "ADD") {
     printf "Adding user: %s\n", a[3];
   }
 }'

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