掌上百科 - PDAWIKI

 找回密码
 免费注册

QQ登录

只需一步,快速开始

查看: 667|回复: 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 编辑 8 }# f6 N6 d, A: Q  L9 B: a
    0 z& l, ?) W; r* _& v
    其实很简单,假定 tmp.txt 里含 'a', 要在Windows的 cmd里换成 "a" 存到 tmp1.txt 里。/ ^" S# i4 r4 h6 t
    我自己也算用命令行用得比较多的人。我的Win10里的 Gow、git、cygwin里含sed、awk、tr。 在 cmd 和 conemu 里试过
    0 c( p* s/ C& V5 J. G# W
    • sed "s/'/\"/g" tmp.txt/ e* Z! e' T7 Y) _
      可以换,但无法存到另一个文件: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('\'', '\"'))" 可以替换,但没法用 > 导向。
      2 ~9 b: m6 _+ |/ |

    5 K; S- `- B5 b! 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 都没问题。/ T7 ]$ f; X" h& h* s+ \; ?
    ( q8 L2 Y' A, [
    不知道各路高人有什么高招没有,感谢。谷歌了一下,好像powershell 里可以,但我暂时不太想学powershell。
    $ ?2 ]5 B/ K- v8 E# ^" D6 L$ n+ u7 t# B4 a; x9 e! ^7 X$ V
    sed 里的 -i 解决了问题,感谢 atauzki% w2 b7 z: N) S! w
    / ]& L1 O" ]8 A; W: ]$ }5 {
    我自己折腾的python命令行,太繁琐,不过也记录一下:  N  d. K7 r( C$ [/ Z8 i% r  b/ o
    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_)"
      + W) a" f' q- ?9 e9 p: w* s2 D
    复制代码
    : y9 M; `/ Y9 j9 {" H: C

    本帖被以下淘专辑推荐:

  • 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 | 显示全部楼层
    试试
    ' {+ d, r2 Z9 O! Y3 h4 R# Y; F
    1. sed -E "s/'/"/g" tmp.txt > tmp1.txt
    复制代码

    ' G/ s6 U1 I; C& N* `7 g或者
    * \9 M* e2 G( D
    1. sed -r "s/'/"/g" tmp.txt > tmp1.txt
    复制代码

    ) A. U. C: g" `/ m+ _+ A% h, J; s" I/ _2 L
    或者如果用perl的话,试试:
    - y; t( `: ?+ @; ?. H- f+ e# `
    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 Y" n) m$ T4 o, [  V
    先cp,然后用sed -i不行吗?
    ; o5 I( |1 f- S& d7 N
    也可以不用手动cp,直接-ibak

    评分

    1

    查看全部评分

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

    [LV.6]常住居民II

    发表于 2019-1-12 18:26:44 | 显示全部楼层
    perl 那个重新导向无效?什么意思 # M7 R9 x! s) P6 [9 f- J8 H
    9 u( h! V/ K2 V4 R/ O5 }
    可以把 > tmp1.txt 删掉
    " E" o3 q; o: {前面加上 -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-26 07:46 , Processed in 0.047221 second(s), 11 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2023, Tencent Cloud.

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