【问题标题】:Find and replace first double-quote before special character via grep通过 grep 查找和替换特殊字符之前的第一个双引号
【发布时间】:2014-06-14 14:05:42
【问题描述】:

我有一大堆文件,其中都有如下所示的文本块:

"Each file has different text between the opening double-quote
and the closing right-quote (or whatever it's called)”

也许不相关,但过去我曾使用grep 进行搜索和替换,如下所示:

grep -Rl 'search' ./path/to/files/ | xargs sed -i 's/search/replace/g

有没有办法做类似的事情,但使用正则表达式用左引号 () 替换开头的普通双引号?替换正确双引号字符的唯一可靠方法是搜索右引号,然后向后搜索前一个双引号。我想。我只是不确定这是否可能或如何做到。

我可以使用 PHP 脚本来完成,但我无法从命令行查看它是否可行。

【问题讨论】:

  • 两行之间是否有换行符?
  • 不,抱歉。那只是为了防止SO中的水平滚动条。
  • 很高兴知道,所以您只想将 替换为"
  • 不,我想将" 替换为
  • “唯一可靠的方法”?如果所有直双引号都是错误的,而所有右双引号都是正确的,那么只需要替换直双引号即可。

标签: regex replace sed grep xargs


【解决方案1】:

你可以使用 sed:

sed -i.bak 's/"\([^”]*”\)/“\1/' file

cat file
“Each file has different text between the opening double-quote and the closing right-quote (or whatever it's called)”

【讨论】:

  • 完美。这是我最终使用的:grep -Rl '”' ./dir/ | xargs sed -i.bak 's/"\([^”]*”\)/“\1/' 我不知道.bak。很有用。我不是最好的正则表达式,但看起来它正在做的是搜索整个字符串,包括两端的引号,然后只替换第一个字符。对吗?
  • 是的,它搜索普通引号​​",然后搜索0个或多个不是的字符,后面跟着
猜你喜欢
  • 2016-06-13
  • 2017-08-12
  • 2015-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-24
  • 2011-04-12
相关资源
最近更新 更多