修改UTF-16输入文件中的第二个匹配项

时间:2012-03-15 18:58:10

标签: shell text unicode replace

我正在尝试在UTF-16文件steamui_english.txt

上执行文本替换

我希望只替换该行的第二个实例

"Steam_Root_Title"  "Steam"

替换值

"Steam_Root_Title"  ""

(请注意,这些列是以制表符分隔的。)

编辑:这是一个bash脚本,我在OS X上,而不是它会改变很多...... 我已经尝试了太多的解决方案来列出它们!

1 个答案:

答案 0 :(得分:2)

您可以使用sed,但希望在处理过程中转换为UTF-8:

iconv -f UTF-16 -t UTF-8 input.txt \
  | sed '0,/"Steam_Root_Title"/! {0,/"Steam_Root_Title"/ s/"Steam"/""/}' \
  | iconv -f UTF-8 -t UTF-16 \
  >output.txt

如果您想在纯粹的bash中执行此操作,可以尝试以下内容:

count=0
while read; do
  if [[ $REPLY = '"Steam_Root_Title"'* ]] ; then
    (( count++ ))
    if (( count == 2 )) ; then
      printf '"Steam_Root_Title"\t""\n'
    else
      echo "$REPLY"
    fi
  else
    echo "$REPLY"
  fi
done < <(iconv -f UTF-16 -t UTF-8 in.txt) | iconv -f UTF-8 -t UTF-16 >out.txt