如何限制查找和替换以替换项目,但如果紧接在它之前的字符是“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/