掌上百科 - PDAWIKI

 找回密码
 免费注册

QQ登录

只需一步,快速开始

查看: 84|回复: 7

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

[复制链接]
  • TA的每日心情
    开心
    2 小时前
  • 签到天数: 72 天

    [LV.6]常住居民II

    发表于 2019-1-12 16:13:24 | 显示全部楼层 |阅读模式
    本帖最后由 mikeee 于 2019-1-12 18:20 编辑
    ' a, K; H* s% w  x, F0 f# p9 m0 G/ ^, v$ g- T) T# R# A
    其实很简单,假定 tmp.txt 里含 'a', 要在Windows的 cmd里换成 "a" 存到 tmp1.txt 里。
    9 P/ m* g5 z- y* t2 E) h, P我自己也算用命令行用得比较多的人。我的Win10里的 Gow、git、cygwin里含sed、awk、tr。 在 cmd 和 conemu 里试过
    8 A1 n  R0 Q- k) o! T) S
    • sed "s/'/\"/g" tmp.txt
      7 E  E0 ?4 H4 o" N) |& s5 A' S可以换,但无法存到另一个文件: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('\'', '\"'))" 可以替换,但没法用 > 导向。) ^; S1 m# V4 H; |

    3 }) z: x( J; V/ D& w# t( l主要问题是这个 \": 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 都没问题。
    ( u* D5 x5 {% B) F1 m
      n: I- K/ [5 a9 Q6 S3 q  P不知道各路高人有什么高招没有,感谢。谷歌了一下,好像powershell 里可以,但我暂时不太想学powershell。6 L+ K1 F% F3 \0 J3 o

    2 O1 r- t% v  D9 d+ A9 P9 ^: |" `sed 里的 -i 解决了问题,感谢 atauzki2 A, t1 ^/ h5 W& V8 T

    ) R7 e! p) o9 m, m- j8 x我自己折腾的python命令行,太繁琐,不过也记录一下:
    & P8 i  y" T# P
    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_)"+ Z9 ^0 b7 p+ h0 s5 [; M4 S
    复制代码
    . m, G$ v" _4 d- m2 s6 S

    本帖被以下淘专辑推荐:

  • 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的每日心情
    无聊
    2 小时前
  • 签到天数: 69 天

    [LV.6]常住居民II

    发表于 2019-1-12 17:49:34 | 显示全部楼层
    试试
    6 K2 x* H" q! Z1 `! W
    1. sed -E "s/'/"/g" tmp.txt > tmp1.txt
    复制代码
    " M) L9 a1 P* m& @& H
    或者
    ! V  i& l& I7 ^
    1. sed -r "s/'/"/g" tmp.txt > tmp1.txt
    复制代码

    ) f5 S' W! Z/ I# r1 g
    $ ?3 _. h0 @& p5 R% v或者如果用perl的话,试试:
    + A7 d1 h& ]7 H" v' F. {3 w
    1. perl -pe"s/\'/"/g" tmp.txt > tmp1.txt
    复制代码

    评分

    1

    查看全部评分

  • TA的每日心情
    无聊
    2 小时前
  • 签到天数: 69 天

    [LV.6]常住居民II

    发表于 2019-1-12 17:54:52 | 显示全部楼层
    atauzki 发表于 2019-1-12 16:22
    2 y8 a, ^: F' G+ M3 ?8 y/ y5 e" g7 c先cp,然后用sed -i不行吗?
    $ Q7 a* Y) j) E" [9 H: r
    也可以不用手动cp,直接-ibak

    评分

    1

    查看全部评分

  • TA的每日心情
    无聊
    2 小时前
  • 签到天数: 69 天

    [LV.6]常住居民II

    发表于 2019-1-12 18:26:44 | 显示全部楼层
    perl 那个重新导向无效?什么意思
    5 a2 l/ h5 N" }4 z8 b3 W7 \' X
    可以把 > tmp1.txt 删掉
    $ I: v8 w. \: H  H& F; U, r前面加上 -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-1-23 03:38 , Processed in 0.498144 second(s), 10 queries , MemCache On.

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

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