0

我有一个名为setting.conf的文本,文本的内容是这样的

area1mood1="${Script_3}+IR_D01+AC_OFF_   ${Script_2}+CR_D601+C1_OPN ${Script_1}+SR_D301+LT_1ON ${Script_1}+SR_D301+LT_2TG ${Script_1}+       SR_D301+LT_3ON ${Script_1}+SD_D405+DM_1L0 ${Script_1}+SD_D405+DM_2L0 ${Script_1}+SD_D405+DM_3LC"

我必须访问这些值

IR_D01+AC_OFF_
CR_D601+C1_OPN
SR_D301+LT_1ON
SR_D301+LT_2TG
SR_D301+LT_3ON
SD_D405+DM_1L0
SD_D405+DM_2L0
SD_D405+DM_3LC

在上面的字符串中,我使用cut -d' ' -f1 -s了但我得到了空格之间的整个字符串。以及如何剪切到行尾并将这些值存储在变量中。我希望所有这些值都存储在变量中。任何人都可以帮忙。我是 bash 脚本的新手。

4

1 回答 1

0

如果你有 GNU grep:

grep -oP '(?<=}\+)[^\s"]+' <<'END'
area1mood1="${Script_3}+IR_D01+AC_OFF_   ${Script_2}+CR_D601+C1_OPN ${Script_1}+SR_D301+LT_1ON ${Script_1}+SR_D301+LT_2TG ${Script_1}+       SR_D301+LT_3ON ${Script_1}+SD_D405+DM_1L0 ${Script_1}+SD_D405+DM_2L0 ${Script_1}+SD_D405+DM_3LC"
END
IR_D01+AC_OFF_
CR_D601+C1_OPN
SR_D301+LT_1ON
SR_D301+LT_2TG
SD_D405+DM_1L0
SD_D405+DM_2L0
SD_D405+DM_3LC

因为前面有空格,所以错过了“SR_D301+LT_3ON”——你不能有可变长度的后视。这虽然有效:

perl -nle 'print for /\}\+\s*([^\s"]+)/g' <<'END'
area1mood1="${Script_3}+IR_D01+AC_OFF_   ${Script_2}+CR_D601+C1_OPN ${Script_1}+SR_D301+LT_1ON ${Script_1}+SR_D301+LT_2TG ${Script_1}+       SR_D301+LT_3ON ${Script_1}+SD_D405+DM_1L0 ${Script_1}+SD_D405+DM_2L0 ${Script_1}+SD_D405+DM_3LC"
END
IR_D01+AC_OFF_
CR_D601+C1_OPN
SR_D301+LT_1ON
SR_D301+LT_2TG
SR_D301+LT_3ON
SD_D405+DM_1L0
SD_D405+DM_2L0
SD_D405+DM_3LC
于 2013-09-12T13:12:57.037 回答