0

我有一个包含要加密的字符串的文本文件。这些字符串由标签表示。

例子:

This is an <tag> example </tag>.

在 UNIX 中(使用 sed、bash 等常用工具)搜索所有出现并同时将其替换为加密值(这是标签内字符串的函数)的最佳方法是什么?

结果:

This is an <tag> <encrypted value here> </tag>.

提前致谢!

4

2 回答 2

0

假设四个不清楚的条件:

  1. 开始和结束标签不必在同一行。
  2. 加密功能不是一些微不足道的改变。
  3. 只有一种标签。
  4. 没有任何类型的嵌套。

在那种情况下,bash、sed、awk 都可能太麻烦了。你最好使用 Perl 或 Python。下面是一个算法:

  1. 将 tag_flag 初始化为 0。
  2. 逐字读取文件(或逐行,分割每一行)。
  3. 当 tag_flag 为 0 并且您没有遇到开始标签时,按原样输出所有内容。
  4. 当您遇到开始标签时,将 tag_flag 设置为 1。继续逐字阅读以收集到 to_be_encrypted 字符串。
  5. 遇到结束标签时,在 to_be_encrypted 上打印加密函数的输出,并将 tag_flag 设置为 0。
于 2012-06-21T02:19:00.127 回答
0

好的,我几天前就找到了解决方案。我使用了 bash 和正则表达式。

这是我的做法:

#!/bin/bash

REGEX='^(.*<tag>)(.*)(<\tag>.*)$'

function process()
{
   RESULT= #do processing of $1 here
}

while read line ; do
   while [[ $line =~ "$REGEX" ]] ; do
      process "${BASH_REMATCH[2]}"
      line="${BASH_REMATCH[1]}$RESULT${BASH_REMATCH[3]}"
   done
   echo "$line" > "$OUTPUT_FILE"
done < "$FILE"
于 2012-06-27T05:08:18.343 回答