繁体   English   中英

shell解析一行以查找某个标记

[英]shell parsing a line to look for a certain tag

我打算创建一个简单的脚本来根据存储在属性文件中的值来编辑文件。 所以基本上我打算遍历原始文件中的每一行,当它遇到一行中的某个标记时说“/#”它将获得标记后面的文本,即证书,然后实现一个函数来解析属性file获取特定值并将其添加到原始文件中。 例如,文件将包含以下行:

“/#证书”

我不确定如何最好地搜索标签,我打算有一个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'

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM