bash - 如何使用 sed 查找和替换前面或后面没有特定字符的项目?

标签 bash replace sed

如何限制查找和替换以替换项目,但如果紧接在它之前的字符是“A”、“B”或“C”或者紧接在它之后的字符是“X”、“Y”,或“Z”。例如。给定这些输入行,如果要将“cat”替换为“pet”:

  • “有一只猫。” → “这是一只宠物。”
  • “有阿卡特。”不变,因为之前找到了“A”。
  • “有猫。”不变,因为在后面找到“Y”。
  • “有 CcatX。”不变,因为“C”在前面,“X”在后面。

最佳答案

这个 sed 应该适合你:

sed -r 's/(^|[^ABC])cat\>/\1pet/g; s/\<cat([^XYZ]|$)/pet\1/g' file

测试:

sed -r 's/(^|[^ABC])cat\>/\1pet/g; s/\<cat([^XYZ]|$)/pet\1/g' <<< 'cat is a cat is a cat'
pet is a pet is a pet

关于bash - 如何使用 sed 查找和替换前面或后面没有特定字符的项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20027033/

相关文章:

regex - 如何仅打印与 sed 匹配的内容?

Bash:遍历参数文件

java - 如何让 javac 使用 .jar 的类?

node.js - 从 Node 脚本打开交互式 SSH session

python - 如何将CUPS打印机绑定(bind)到用户?

sed 或 awk,更新第一列数据

r - 循环 : Replacing value at a certain position

Javascript 替换函数(正则表达式)

javascript - 将字符串中的元音替换为 "i"...您能解释一下这个表达式吗? someText.replace(/[aAeEoOuU]/ig ,"i")

linux - 从键值文件中提取版本并在单个命令中替换为 html 文件