用于查找模式的正则表达式用法

时间:2015-01-22 14:25:37

标签: regex sed

我的bash脚本中有一项任务。我必须通读一个文件并将所有单词 Custom 存储到数组中。 意味着我的数组将包含。 {"Custom_KEHJEO" "Custom_TTT_LEJEB_Adaptor" "ustom_SDE_Universal_Adaptor_EEEEEE"}

我可以使用sed命令从第9行开始阅读文件内容,但无法选择'自定义*'字符串并存储到数组中。

有一个文件让我们说~folvers.txt,内容如下,从第9行开始,总是如此,我有以下文字.... ...除了日期更改外,最后3行也与下面完全相同。

Custom_KEHJEO
Custom_TTT_LEJEB_Adaptor
Custom_SDE_Universal_Adaptor_EEEEEE
Custom_SIL_XXXXXXX
Custom_SIL_UUUUUUU
SDE_PSFT_89_Adaptor
SDE_SBL_78_Adaptor
UA_SDE
SILOS
SDE_SBL_Vert_811_Adaptor
SDE_JDEE1_90_Adaptor
SDE_Universal_Adaptor
Custom_SIL_XJGADWG
Custom_SIL_UUUUUUAAFE
SDE_ORAR12_Adaptor
SDE_JDEE1_811SP1_Adaptor
SDE_ORAR1212_Adaptor
SDE_ORA11510_Adaptor
SDE_SBL_80_Adaptor
Custom_SIL_MKEIHE
Custom_SDE_GAHWYWB
.listobjects completed successfully.

Completed at Thu Jan 22 12:46:39 2015

2 个答案:

答案 0 :(得分:1)

执行此操作的最可靠方法可能是grep

arr=($(grep ^Custom filename))

# arr is now a bash array containing all tokens that begin with Custom
echo "${arr[@]}"

您也可以使用sed:

arr=($(sed '/^Custom/!d' filename))

...但是grep才真正为此而努力。请注意,这取决于每行一个令牌的文件结构。

答案 1 :(得分:0)

这将继续并将每个字符串作为参数传递给您的其他可执行文件。

INPUTFILE=folders.txt
for string in `tail -n+9 $INPUTFILE | grep ^Custom`; do
  othercommand $string
done

我刚看到@ Wintermute的答案,这是一个很好的答案。如果您实际上需要捕获数组中的这些字符串以用于其他目的,而不仅仅是传递给另一个命令,那么@ Wintermute更合适。