外壳解析一行以查找某个标记



我计划创建一个简单的脚本,以根据存储在属性文件中的值编辑文件。所以基本上我计划遍历原始文件中的每一行,当它遇到一行中的某个标签时,比如"/#",它将获取标签后面的文本,即证书,然后实现一个函数来解析属性文件以获取某些值并将它们添加到原始文件中。因此,例如,该文件将具有以下行:

"/#certs"

不确定如何最好地搜索标签,我打算有一个 if 来查找/#,然后拆分剩余的文本以获取字符串。

while read line
    do
    #need to parse line to look for tag

    echo line >> ${NEW_FILE}
    done < ${OLD_FILE}

任何帮助将不胜感激

====

===================================

编辑:

我的解释有点差;抱歉。我只是试图获取/# 后面的文本 - 即我只想获取它前面的字符串值。然后,我可以根据文本的内容调用一个函数。

您可以使用 BASH 正则表达式功能:

while read line
do
if [[ "$line" =~ ^.*/#certs(.*)$ ]]; then
    # do your processing here 
    # echo ${BASH_REMATCH[1]} is the part after /#certs
    echo echo ${BASH_REMATCH[1]} >> ${NEW_FILE}
fi
done < ${OLD_FILE}

这是可移植到 Bourne shell 的,因此,当然,ksh 和 Bash。

case $line in
    '/#'* ) tag="${line#/#}" ;;
esac

为了将其置于某种上下文中,这里有一个更现实的示例,说明如何使用它:

while read line; do
    case $line in
        '/#'* ) tag="${line#/#}" ;;
        *) continue ;; # skip remainder of loop for lines without a tag
    esac
    echo "$tag"
    # Or maybe do something more complex, such as
    case $tag in
        cert)
           echo 'We have a cert!' >&2 ;;
        bingo)
           echo 'You are the winner.' >&2
           break # terminate loop
           ;;
        esac
done <$OLD_FILE >$NEW_FILE
例如,

您可以使用sed流编辑器搜索字符串并一步操作它们。

echo $line | sed -rn 's:^.*/#(certs.+):1:p'

这将仅在相关行/#后打印相关部分。

相关内容

  • 没有找到相关文章

最新更新