如何使用正则表达式替换bash中的某些字符?

时间:2014-06-17 14:54:49

标签: linux bash shell scripting suse

我是bash的新手,所以我对bash中的正则表达式语法并不多。我试图从文件路径数组中删除___.xml部分并尝试将其存储在临时变量中。然后我将cat临时变量。原因是因为我将在另一部分中使用该数组。到目前为止,我有这个代码(当然有一个错误),它不会输出任何内容:

files=()
files+=/server/1.0/hostname/filename.xml
files+=/server/1.0/hostname/another_file.xml

for (( i = 0 ; i<${#files[@]} ; i++ )); do
    cat ${files[$i]} 2> /dev/null
done 

我想要做的是在for循环中创建一个temp var,看起来像这样:

files=()
files+=/server/1.0/hostname/filename.xml
files+=/server/1.0/hostname/another_file.xml

for (( i = 0 ; i<${#files[@]} ; i++ )); do
    temp=`echo ${files[$i]} | ADD REGEX HERE`
    cat $temp 2> /dev/null
done

有没有办法这样做?谢谢!

2 个答案:

答案 0 :(得分:1)

BASH数组处理中存在语法问题。试试这个:

files=()
files+=(/server/1.0/hostname/filename.xml)
files+=(/server/1.0/hostname/another_file.xml)

for f in "${files[@]}"; do
    cat "$f" 2>/dev/null
done 

答案 1 :(得分:1)

这将打印文件的基名。我认为这就是你要求的东西?

#!/bin/bash

files=()
files+=(/server/1.0/hostname/filename.xml)
files+=(/server/1.0/hostname/another_file.xml)

for f in "${files[@]}"; do
    echo ${f##*/}
done