掌上百科 - PDAWIKI

 找回密码
 免费注册

QQ登录

只需一步,快速开始

查看: 129|回复: 7

[求助] 请教如何在 Windows里cmd命令行将文件里的 ' 换成 ”

[复制链接]
  • TA的每日心情
    开心
    昨天 08:31
  • 签到天数: 113 天

    [LV.6]常住居民II

    发表于 2019-1-12 16:13:24 | 显示全部楼层 |阅读模式
    本帖最后由 mikeee 于 2019-1-12 18:20 编辑
    % T: p( C) w# A. R& q1 U, W* z
    $ s  Q4 q$ y6 j3 n% B$ H其实很简单,假定 tmp.txt 里含 'a', 要在Windows的 cmd里换成 "a" 存到 tmp1.txt 里。
    , a( d' c) U4 f. a5 W. a% n1 u9 b我自己也算用命令行用得比较多的人。我的Win10里的 Gow、git、cygwin里含sed、awk、tr。 在 cmd 和 conemu 里试过+ o2 M5 y) m2 J9 U$ l) I0 ~
    • sed "s/'/\"/g" tmp.txt1 G6 D$ G+ y: P- a( {
      可以换,但无法存到另一个文件:sed "s/'/\"/g" tmp.txt > tmp1.txt 和 sed "s/'/\"/g" tmp.txt| tee tmp1.txt 都出错。由于命令里含 \" 导致的。
    • tr: 不行, cat tmp.txt|tr "'" "\"" 可以替换, cat tmp.txt|tr "'" "\"" > tmp1.txt 出错。
    • awk:不行,  awk "gsub(/'/, \"\\\"\");" tmp.txt 可以替换但不能用 > 或 tee 导向另一个文件。
    • 命令行python:不行, cat tmp.txt| python -c "import sys; import sys; print(sys.stdin.read().replace('\'', '\"'))" 可以替换,但没法用 > 导向。
      & r; y' m$ y8 H% E7 e

    7 q8 i5 b. x& q. H- L7 M主要问题是这个 \": sed "s/'/x/g" tmp.txt > tmp1.txt、cat tmp.txt|tr "'" "x" > tmp1.txt、 awk "gsub(/'/, \"x\");" tmp.txt > tmp1.txt、cat tmp.txt| python -c "import sys; import sys; print(sys.stdin.read().replace('\'', 'x'))" > tmp1.txt 都没问题。
    ! A$ l: }% y( [- C, a; d: n
    ' u" X" J9 H8 _( u* b1 f: B4 G不知道各路高人有什么高招没有,感谢。谷歌了一下,好像powershell 里可以,但我暂时不太想学powershell。0 Q7 k- |1 l' a% ]
    2 f! q; Y( ?7 E' w$ @+ i1 c$ r
    sed 里的 -i 解决了问题,感谢 atauzki
    $ i. o  i' p  y8 ?  K! ^7 _$ y
    ) |2 v+ z- L1 b0 q我自己折腾的python命令行,太繁琐,不过也记录一下:
    2 Z( S4 Z+ \) }* E
    1. cat tmp.txt| python -c "import sys; import sys; str_=sys.stdin.read().replace('\'', '"'); f = open('tmp1.txt', 'wt', encoding='utf8'); f.write(str_)"5 t. H' A& k, k$ M: E
    复制代码

    , q% V8 d( a  _

    本帖被以下淘专辑推荐:

  • TA的每日心情
    擦汗
    2019-1-14 12:21
  • 签到天数: 134 天

    [LV.7]常住居民III

    发表于 2019-1-12 16:22:36 | 显示全部楼层
    先cp,然后用sed -i不行吗?

    点评

    评论右下角的“评分”不就可以送米么…  发表于 2019-1-12 18:07
    -i 好办法, 感谢!好像没办法送米……  发表于 2019-1-12 17:28

    评分

    1

    查看全部评分

  • TA的每日心情
    无聊
    6 天前
  • 签到天数: 90 天

    [LV.6]常住居民II

    发表于 2019-1-12 17:49:34 | 显示全部楼层
    试试
    4 b2 i5 L! `) `
    1. sed -E "s/'/"/g" tmp.txt > tmp1.txt
    复制代码
    , @% s. J; E3 s. `
    或者4 G4 E7 u  h/ v4 W8 p
    1. sed -r "s/'/"/g" tmp.txt > tmp1.txt
    复制代码
    / `2 i' U( E6 `; b0 ~
    4 Q  E7 v* {3 X( w& j4 s
    或者如果用perl的话,试试:3 Y: j: O- |: x  q4 q; T$ g
    1. perl -pe"s/\'/"/g" tmp.txt > tmp1.txt
    复制代码

    评分

    1

    查看全部评分

  • TA的每日心情
    无聊
    6 天前
  • 签到天数: 90 天

    [LV.6]常住居民II

    发表于 2019-1-12 17:54:52 | 显示全部楼层
    atauzki 发表于 2019-1-12 16:22+ c7 l3 `6 C, Z( x) P+ b
    先cp,然后用sed -i不行吗?
    ' U% A5 k1 q2 U
    也可以不用手动cp,直接-ibak

    评分

    1

    查看全部评分

  • TA的每日心情
    无聊
    6 天前
  • 签到天数: 90 天

    [LV.6]常住居民II

    发表于 2019-1-12 18:26:44 | 显示全部楼层
    perl 那个重新导向无效?什么意思 " \; T  l, x# C! O$ D

    0 o' _0 p# K4 V+ w$ C可以把 > tmp1.txt 删掉
    / \& ]7 I3 v/ D& n- ?# g! C前面加上 -ibak 试试

    点评

    刚才查了一下,perl和sed在这方面是一样的  发表于 2019-1-12 18:52
    您需要登录后才可以回帖 登录 | 免费注册

    本版积分规则

    顶部qrcode底部
    关注公众号送论坛充值码
    关注微信公众平台
    关注微信公众号 pdawiki,获取邀请码,看文抢积分,抽奖得浮云! Follow our Wechat official account "pdawiki", get invitation codes, and play the lottery to earn points (积分)!

    小黑屋|手机版|Archiver|PDAWIKI |网站地图

    GMT+8, 2019-3-21 12:09 , Processed in 0.541528 second(s), 17 queries , MemCache On.

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表