regex - 使用 sed 仅替换字符的单个实例

标签 regex unix awk sed

我只需要替换反斜杠的单个实例。

Input: \\apple\\\orange\banana\\\\grape\\\\\
Output: \\apple\\\orangebanana\\\\grape\\\\\
Tried using sed 's/\\//g' which is replacing all backslashes

注意:单个反斜杠的前一个字符可以是任何字符,包括字母数字或特殊字符。这是一个多行文本文件。

感谢您对此的帮助。

最佳答案

如果要考虑perl然后向前看,而向前看正是您在这里需要的:

perl -pe 's~(?<!\\)\\(?!\\)~~g' file

\\apple\\\orangebanana\\\\grape\\\\\

详情

  • (?<!\\) : 否定回顾以确保前一个字符不是 \
  • \\ : 匹配\
  • (?!\\) : 否定前瞻以确保下一个字符不是 \

如果你想使用sed只有这样我才建议:

sed -E -e ':a' -e 's~(^|[^\\])\\([^\\]|$)~\1\2~g; ta' g

关于regex - 使用 sed 仅替换字符的单个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68717117/

相关文章:

c++ - 具有不同返回类型的显式特化模板类成员函数

linux - 递归地使用 chmod 来增加低于阈值的文件和目录的权限,但不更改那些已经高于阈值的文件和目录

unix - SSH命令挂起

linux - 使用 awk 或 sed 在文件的第一列中添加增量日期

linux - Apache 日志 : Count top 10 URLs by bytes served

linux - AWK 输出到数组

java - 当字符串被 (a-z) 包围时,从字符串中删除破折号,但不要从中间删除破折号

c# - .NET Regex - 一次替换多个字符而不覆盖?

regex - 如何匹配多个出现的子字符串

php - 制作一个条件正则表达式