如何使用 sed 替换字符串中的值但保持字符串完整

如何使用 sed 替换字符串中的值但保持字符串完整

如何使用 sed 替换字符串中的值但保持字符串完整?

例如echo "01XX1234"

我希望XX用十六进制值替换并保持011234不变。我已经尝试了所有我能想到的组合,但sed我还是被打败了。

我可以这样做,但有更简单的方法吗?

echo "01XX1234" | sed -n 's/\(01..1234\)/01AB1234/g'

答案1

sed只会替换字符串的匹配子字符串。

$ echo '01XX1234' | sed 's/XX/AF/'
01AF1234

如果您打算始终替换第三个和第四个字符,但保持第一个和第二个字符不变,您可以使用:

$ echo '01XX1234' | sed 's/\(.\{2\}\).\{2\}/\1AF/'
01AF1234
  • \{2\}表示前面的字符出现两次(在本例中.:任何字符)
  • \(...\)括号用于创建匹配组;您可以稍后在模式或替换字符串中引用匹配的子字符串
  • \1指第一个匹配的子字符串(在本例中即“01”)

答案2

echo "01XX1234" | sed 's/XX/AB/'

或者
echo "01XX1234" | sed 's/\(01\).*\(1234\)/\1AB\2/'

答案3

使用保留空间:

> echo "01XX1234" | sed -n 'h;s/01..1234/01AB1234/g;p;x;p'
01AB1234
01XX1234

sed 命令:

  • h --> 将模式空间移动到保存空间
  • p --> 打印
  • x --> 交换保持空间和模式空间

相关内容