在文本文件中删除特定值并将其存储在变量中

时间:2013-09-12 10:19:56

标签: bash shell

我有一个名称为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脚本的新手。

1 个答案:

答案 0 :(得分: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