使用正则表达式查找模式
regex usage to find a pattern
我的 bash 脚本中有一项任务要完成。我必须通读一个文件并将所有每个单词 Custom 存储到数组中。
意味着我的数组将包含。 {"Custom_KEHJEO" "Custom_TTT_LEJEB_Adaptor" "ustom_SDE_Universal_Adaptor_EEEEEE"}
我可以使用 sed 命令从第 9 行开始读取文件的内容,但无法获取 'Custom*' 个字符串并存储到数组中。
有一个文件可以说 ~ folders.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
最明智的方法可能是 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 确实为此而生。请注意,这取决于每行一个标记的文件结构。
这将继续并将每个字符串作为参数传递给您的其他可执行文件。
INPUTFILE=folders.txt
for string in `tail -n+9 $INPUTFILE | grep ^Custom`; do
othercommand $string
done
刚看到@Wintermute的回答,很好。如果您确实需要将这些字符串捕获到数组中以用于其他目的,而不仅仅是传递给另一个命令,@Wintermute's 更合适。
我的 bash 脚本中有一项任务要完成。我必须通读一个文件并将所有每个单词 Custom 存储到数组中。
意味着我的数组将包含。 {"Custom_KEHJEO" "Custom_TTT_LEJEB_Adaptor" "ustom_SDE_Universal_Adaptor_EEEEEE"}
我可以使用 sed 命令从第 9 行开始读取文件的内容,但无法获取 'Custom*' 个字符串并存储到数组中。
有一个文件可以说 ~ folders.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
最明智的方法可能是 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 确实为此而生。请注意,这取决于每行一个标记的文件结构。
这将继续并将每个字符串作为参数传递给您的其他可执行文件。
INPUTFILE=folders.txt
for string in `tail -n+9 $INPUTFILE | grep ^Custom`; do
othercommand $string
done
刚看到@Wintermute的回答,很好。如果您确实需要将这些字符串捕获到数组中以用于其他目的,而不仅仅是传递给另一个命令,@Wintermute's 更合适。