我打算根据存储在属性文件中的值创建一个简单的脚本来编辑文件。 所以基本上我打算遍历原始文件中的每一行,当它遇到一行中的某个标记时说“/#”它将获得标记后面的文本,即证书,然后实现一个函数来解析属性file获取特定值并将其添加到原始文件中。 例如,文件将包含以下行:
“/#证书”
我不确定如何最好地搜索标签,我计划找一个if来查找/#然后拆分剩下的文本来获取字符串。
while read line
do
#need to parse line to look for tag
echo line >> ${NEW_FILE}
done < ${OLD_FILE}
非常感谢任何帮助
=====================================
编辑:
我的解释有点差;道歉。我只是想在/#之后得到文本 - 即我只想获得它之前的字符串值。然后我可以根据文本调用函数。
答案 0 :(得分:1)
您可以使用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}
答案 1 :(得分:1)
这可以移植到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
答案 2 :(得分:0)
例如,您可以使用流编辑器sed
一步搜索字符串并对其进行操作。
echo $line | sed -rn 's:^.*/#(certs.+):\1:p'
这将仅打印相关行/#
之后的相关部分。