递归通配符搜索和替换

时间:2014-07-18 16:42:50

标签: bash replace sed

我试图找出如何让sed递归替换通配符字符串。

我需要改变

style="position:absolute;top:522;left:118">

style="position:absolute;top:522px;left:118px">

这些数字必须是通配符,因为它们会不断变化。此外,如果有px,则无需执行任何操作。

3 个答案:

答案 0 :(得分:0)

您可以使用此sed

sed 's/\(:[0-9]\+\)\(px\)\?/\1px/g' yourfile

如果您的sed支持-E选项,

sed -E 's/(:[0-9]+)(px)?/\1px/g' yourfile

<强>测试

$ cat file
style="position:absolute;top:522;left:118;right:28px"> 

$ sed 's/\(:[0-9]\+\)\(px\)\?/\1px/g' file
style="position:absolute;top:522px;left:118px;right:28px"> 

答案 1 :(得分:0)

你可以拥有

sed -r 's|(style="position:absolute;top:[0-9]+)(px)?(;left:[0-9]+)(px)?(">)|\1px\3px\5|g' file

或者可能稍微不那么具体:

sed -r -e 's@((top|left):[0-9]+)(px)?@\1px@g' file

添加-i以就地编辑文件。

答案 2 :(得分:0)

您可以使用此awk

awk '/style/ && !/px">/ {sub(/">/,"px&")}1' file

如果该行确实包含style,但缺少px,请将其添加。