Board logo

标题: [问题求助] [已解决]sed命令怎么替换字符(含中文)? [打印本页]

作者: JooKin    时间: 2012-4-30 18:23     标题: [已解决]sed命令怎么替换字符(含中文)?

x.txt如下:
  1. abc你我他efg
  2. 123456ABCD
  3. 你我他987654
  4. abc你好sdf
  5. 如果abc
复制代码
1,把中文“你我他”替换成“世界”,替换失败:
  1. C:\Users\Administrator\Desktop\temp>sed "s/你我他/世界/g" x.txt
  2. abc世界efg
  3. 123456ABCD
  4. sed: 无法将 10 个项目写入 stdout:Arg list too long
复制代码
2,把“abc”替换成“世界”,也失败:
  1. C:\Users\Administrator\Desktop\temp>sed "s/abc/世界/g" x.txt
  2. sed: 无法将 13 个项目写入 stdout:Invalid argument
复制代码
请问我是缺少什么参数才会出现这种问题吗?还是说我写法有错?我的sed版本是最新的sed-4.2.1
作者: hfg1977    时间: 2012-4-30 20:49

两条命令没有任何错误.

不是 'sed' 也不是语法问题.
另sed的错误提示不可能使用中文,你不会用的什么汉化版吧?
介意换英文正版.
作者: gawk    时间: 2012-4-30 21:41

  1. sed -i "s/你我他/世界/g" x.txt
复制代码

作者: JooKin    时间: 2012-4-30 22:17

回复 2# hfg1977

真的是这样的,我的sed是GNU官方完整安装版本-sed-4.2.1-setup.exe  安装完就是中文的:
  1. C:\Users\Administrator\Desktop>sed --h
  2. 用法: sed [选项]... {脚本(如果没有其他脚本)} [输入文件]...
  3.   -n, --quiet, --silent
  4.                  取消自动打印模式空间
  5.   -e 脚本, --expression=脚本
  6.                  添加“脚本”到程序的运行列表
  7.   -f 脚本文件, --file=脚本文件
  8.                  添加“脚本文件”到程序的运行列表
  9.   -i[扩展名], --in-place[=扩展名]
  10.                  直接修改文件(如果指定扩展名就备份文件)
  11.   -b, --binary
  12.                  以二进制方式打开文件 (回车加换行不做特殊处理)
  13.   -c, --copy
  14.                  use copy instead of rename when shuffling files in -i mode
  15.                  (avoids change of input file ownership)
  16.   -l N, --line-length=N
  17.                  指定“l”命令的换行期望长度
  18.   --posix
  19.                  关闭所有 GNU 扩展
  20.   -r, --regexp-extended
  21.                  在脚本中使用扩展正则表达式
  22.   -s, --separate
  23.                  将输入文件视为各个独立的文件而不是一个长的连续输入
  24.   -u, --unbuffered
  25.                  从输入文件读取最少的数据,更频繁的刷新输出
  26.       --help     打印帮助并退出
  27.       --version  输出版本信息并退出
  28. 如果没有 -e, --expression, -f 或 --file 选项,那么第一个非选项参数被视为
  29. sed脚本。其他非选项参数被视为输入文件,如果没有输入文件,那么程序将从标准
  30. 输入读取数据。
  31. GNU sed home page: <http://www.gnu.org/software/sed/>.
  32. General help using GNU software: <http://www.gnu.org/gethelp/>.
  33. E-mail bug reports to: <bug-gnu-utils@gnu.org>.
  34. Be sure to include the word ``sed'' somewhere in the ``Subject:'' field.
复制代码

作者: JooKin    时间: 2012-4-30 22:24

回复 3# gawk


    指定-i参数确实可以,但是会在当前目录生成文件名是“seduGhUJf”的没有扩展名的临时文件,而且每运行一次生成的文件名都不一样,“sedrB7cVb”,“sed5fexNj” ………… 但是x.txt内容确实正确替换了。请问什么原因?
作者: gawk    时间: 2012-4-30 22:27

回复 5# JooKin


    sed版本问题
作者: JooKin    时间: 2012-4-30 22:33

回复 6# gawk


    应该不会啊 我是官方下载的 而且是最新的 没理由出现这种低级的BUG
作者: gawk    时间: 2012-5-1 06:34

回复 7# JooKin


谁说这是bug了
人家就是这样设计的
试试别的版本吧:
http://www.bathome.net/thread-13353-1-1.html
http://www.bathome.net/thread-15605-1-1.html
作者: JooKin    时间: 2012-5-1 11:21

回复 8# gawk


    好吧你赢了多谢
作者: yangeren    时间: 2012-5-1 23:01

echo %dirName%&md %dirName%
作者: yangeren    时间: 2012-5-1 23:04

echo %dirName%&md %dirName%




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2