掌上百科 - PDAWIKI

 找回密码
 免费注册

QQ登录

只需一步,快速开始

查看: 665|回复: 8

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

[复制链接]
  • TA的每日心情
    开心
    2019-8-21 08:44
  • 签到天数: 163 天

    [LV.7]常住居民III

    发表于 2019-1-12 16:13:24 | 显示全部楼层 |阅读模式
    本帖最后由 mikeee 于 2019-1-12 18:20 编辑 5 f+ o4 D* m" ?  f$ U; U4 K/ b
    " ]4 @2 Y# S# W- A2 [
    其实很简单,假定 tmp.txt 里含 'a', 要在Windows的 cmd里换成 "a" 存到 tmp1.txt 里。
    6 q% ^! ~3 z) X) _/ f+ N  s5 [' P我自己也算用命令行用得比较多的人。我的Win10里的 Gow、git、cygwin里含sed、awk、tr。 在 cmd 和 conemu 里试过' F1 ]; z; Y. w+ C0 I5 R
    • sed "s/'/\"/g" tmp.txt
      5 s9 i9 \# p, @可以换,但无法存到另一个文件: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('\'', '\"'))" 可以替换,但没法用 > 导向。0 H1 b6 k: s7 i2 D2 P0 f3 y

    4 R! k; l( t# d主要问题是这个 \": 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 都没问题。+ n* b7 E) V+ E, _) E- j
    1 i" k: `8 i& B* }$ L& x
    不知道各路高人有什么高招没有,感谢。谷歌了一下,好像powershell 里可以,但我暂时不太想学powershell。% C5 N9 Y5 Q; g2 [
    # b$ J- P1 i2 w4 ?; \! L% U/ W
    sed 里的 -i 解决了问题,感谢 atauzki
    - o' w4 @4 e4 P0 h3 b; t* v
    7 V, x* N2 F6 E7 k- @8 X* J我自己折腾的python命令行,太繁琐,不过也记录一下:
    0 W! u" W0 Z. D+ }( `/ 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_)"
      ; |3 A3 d' i% L
    复制代码
    9 y4 q/ y8 ]/ o( Q0 [5 R

    本帖被以下淘专辑推荐:

  • TA的每日心情
    慵懒
    2021-9-28 14:33
  • 签到天数: 158 天

    [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的每日心情
    奋斗
    2019-4-14 02:12
  • 签到天数: 93 天

    [LV.6]常住居民II

    发表于 2019-1-12 17:49:34 | 显示全部楼层
    试试
    * T3 s% C7 r7 e3 G8 ?) h
    1. sed -E "s/'/"/g" tmp.txt > tmp1.txt
    复制代码

    , l. b' O1 z) J) B% I7 U或者# O7 E4 I  B) K" v2 R
    1. sed -r "s/'/"/g" tmp.txt > tmp1.txt
    复制代码
    % ^/ B5 E& G7 \! K% P3 b

    ) H/ U8 b% m8 z或者如果用perl的话,试试:
    8 J6 I) L5 T0 @# ^* @
    1. perl -pe"s/\'/"/g" tmp.txt > tmp1.txt
    复制代码

    评分

    1

    查看全部评分

  • TA的每日心情
    奋斗
    2019-4-14 02:12
  • 签到天数: 93 天

    [LV.6]常住居民II

    发表于 2019-1-12 17:54:52 | 显示全部楼层
    atauzki 发表于 2019-1-12 16:220 y0 s4 y- [# ^  x6 H& n: x( Z
    先cp,然后用sed -i不行吗?
    1 y5 F0 Y% w0 }! k0 C
    也可以不用手动cp,直接-ibak

    评分

    1

    查看全部评分

  • TA的每日心情
    奋斗
    2019-4-14 02:12
  • 签到天数: 93 天

    [LV.6]常住居民II

    发表于 2019-1-12 18:26:44 | 显示全部楼层
    perl 那个重新导向无效?什么意思
    * o$ J4 `$ I% g9 W- y+ T& P5 T
    5 _6 V0 g0 w; e3 B8 W可以把 > tmp1.txt 删掉
    6 A7 M8 {8 p: ?; T% h+ |; p) ?前面加上 -ibak 试试

    点评

    刚才查了一下,perl和sed在这方面是一样的  发表于 2019-1-12 18:52

    该用户从未签到

    发表于 2020-2-3 15:05:15 | 显示全部楼层
    Thanks for your great work.
    您需要登录后才可以回帖 登录 | 免费注册

    本版积分规则

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

    GMT+8, 2024-4-20 21:50 , Processed in 0.057552 second(s), 16 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2023, Tencent Cloud.

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