使用“sed”进行数组索引

使用“sed”进行数组索引

我正在编写一个 shell 脚本,该脚本搜索过去 24 小时内修改的目录,然后使用 tar 对其进行压缩。

文件夹搜索:

find /path to log directory/ -maxdepth 1 -type d -mtime +0 

示例输出:

/path to log directory/01_05_2016
/path to log directory/02_05_2016
/path to log directory/03_05_2016
/path to log directory/04_05_2016

截断不必要的字符:

find /path to log directory/ -maxdepth 1 -type d -mtime +0 | tr -d "_" | tr -d "path to log directory"

示例输出:

01052016 02052016 03052016 04052016

使用“sed”将截断的字符串分隔为单独的数组元素:

# Folder search

declare -a array="($(find <0-24 hour directory serach> | <truncate uncecessary character> | sed 's/\([0-9]*\).*/[\1]="\1"/'))"

# Array Printing
echo "Number of Array Elements: "${#array[@]}
echo "array[01052016]: " ${array[01052016]}
echo "array[02052016]: " ${array[02052016]}
echo "array[03052016]: " ${array[03052016]}
echo "array[04052016]: " ${array[04052016]}

示例输出

Number of Array Elements: 4
array[01052016]: 01052016
array[02052016]: 02052016
array[03052016]: 03052016
array[04052016]: 04052016

压缩输出:

LOG_DIR_NAME='<find folder>'

xargs tar -cvzPf /ouput folder/logname.tar.gz  /path to log directory $LOG_DIR_NAME

问题陈述:

通过使用 sed 命令,我可以将搜索字符串分成单独的数组元素。使用此命令

sed 's/\([0-9]*\).*/[\1]="\1"/'

其中 [\1] 定义我的数组索引,“\1”定义我的元素。

所需输出 我有兴趣获取从索引(0 到 n)存储的数组元素

array[0]: 01052016
array[1]: 02052016
array[2]: 03052016
array[3]: 04052016

在这种情况下,如何自定义数组索引或在不知道起始索引的情况下遍历数组?

请帮忙

谢谢

答案1

首先,您应该将命令简化为:

$ find "/path to log directory/" -maxdepth 1 -type d -mtime +0 | sed 's#.*/##; s#_##g' 
01052016
03052016
04052016
02052016

接下来,要保存为数组,您可以这样做:

array=( $(find "/path to log directory/" -maxdepth 1 -type d -mtime +0 | sed 's#.*/##; s#_##g') )

这可以根据需要将其保存在一个具有数字的数组中,索引从 0 开始递增:

$ for i in {0..3}; do echo "$i : ${array[$i]}"; done
0 : 01052016
1 : 03052016
2 : 04052016
3 : 02052016

也就是说,如果您确实发现自己需要迭代关联数组,您也可以这样做:

$ declare -a array=( "foo"=>"bar" "baz"=>"bad" )
$ for i in ${!array[*]}; do echo "$i : ${array[$i]}"; done
baz : bad
foo : bar

相关内容