【问题标题】:Bash: replace with alternating symbolBash:替换为交替符号
【发布时间】:2014-12-22 07:44:59
【问题描述】:
我想从某种文本(ulysses iii iCloud Text.txt 文件)中提取降价。编辑器用“对象替换字符”0xEF 0xBF 0xBC (efbfbc) 替换了所有方括号,我想撤消此操作。
如何用“[”替换所有奇数,用“]”替换所有其他奇数。
编辑:
例如,我想将每次出现的x 替换为[或]:
Some xlinkx -> Some [link]
【问题讨论】:
标签:
bash
markdown
string-substitution
【解决方案1】:
您可以将sed 用于您的目的。使用sed -i,它将就地编辑文件,进行所需的更改。要在file.bak 中创建原始备份,请使用sed -i.bak。该表达式要求您将要替换的字符放在变量 char 中(例如,在您的示例中为 char=x)。然后以下内容将所有出现的x..stuff..x 替换为[..stuff..]:
sed -i "s/\(^.*\)\b$char\([^$char]*\)$char\b\(.*$\)/\1[\2]\3/g" filename
示例:
$ char=x; echo "Some xlinkx" | sed -e "s/\(^.*\)\b$char\([^$char]*\)$char\b\(.*$\)/\1[\2]\3/g"
Some [link]
表达式利用单词边界 \b 来控制表达式开头和结尾的匹配,以确保将第一次出现替换为[,第二次替换为]。