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

Shell 修改UTF-16输入文件中的第二个匹配项,shell,text,unicode,replace,Shell,Text,Unicode,Replace,我正在尝试对UTF-16文件执行文本替换 我只想更换第二条线路 "Steam_Root_Title" "Steam" 具有重置价值 "Steam_Root_Title" "" (请注意,这些列是以制表符分隔的) 编辑:这是一个bash脚本,我在OSX上,并不是说它会改变很多。。。 我尝试了太多的解决方案,无法在这里列出 您可以使用sed,但在处理过程中需要转换为UTF-8: iconv -f UTF-16 -t UTF-8 input.txt \ | sed '0,/"Steam_R

我正在尝试对UTF-16文件执行文本替换

我只想更换第二条线路

"Steam_Root_Title"  "Steam"
具有重置价值

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

编辑:这是一个bash脚本,我在OSX上,并不是说它会改变很多。。。
我尝试了太多的解决方案,无法在这里列出

您可以使用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
count=0
边读边读;做
如果[[$REPLY='“Steam_Root_Title”'*];然后
((count++)
如果((计数=2));然后
打印“蒸汽根标题”\t“\n”
其他的
回显“$REPLY”
fi
其他的
回显“$REPLY”
fi
done
我可能可以帮你,但你的问题不清楚。首先,你说的是什么操作系统和脚本语言?顺便说一句,在未来——不要说“我在这里看到的一切都不起作用”,而是确切地描述一下你尝试了什么失败。与Linux或Cygwin相比,OS X确实有很大的变化,因为GNU工具在那里不是标准的。我得到了以下错误:sed:1:“0,/“Steam\u Root\u Title/!”:替换命令中的错误标志:'}'@ItsMeMario使用GNU sed。或者,如果你有别人用awk或其他工具给你的菜谱(但在你之前尝试时失败了),你也可以使用它们;两边都有iconv调用应该足以让普通的UNIX工具在以前无法使用的地方处理您的文件。@ItsMeMario提供了一个仅依赖于bash和iconv的版本,删除了GNU依赖性。这个答案非常有效!单个(管道)命令,所有bash。。很不错的!非常感谢查尔斯·达菲!