sed 分支不适用于 OSX:未定义的标签
sed branching not working on OSX: undefined label
我正在尝试调整来自 的答案,该答案添加了控制流以提供匹配状态代码:
cat file.txt | sed 's/1/replaced-it/;tx;q1;:x'
它在 Ubuntu 和 Alpine 上按预期工作,但在 Mac OSX (11.6
) 上失败,使用任何 shell.
sed: 1: "s/1/replaced-it/;tx;q1;:x": undefined label 'x;q1;:x'
我能找到的所有关于 sed
在 OSX 上行为不当的参考文献都是针对就地文件编辑的,这里不是这种情况。
sed 中的命令主要由换行符分隔。
| sed 's/1/replaced-it/
tx
q1
:x
'
或者:
sed -e 's/1/replaced-it/' -e 'tx' -e 'q1' -e ':x'
此外,q1
是一个 GNU sed 扩展——并非每个 sed
都支持它。它必须被删除、重构,或者您必须安装 GNU sed
.
总的来说,用awk、python或perl来写。
这是一个 Awk 重构。
awk '/1/ { sub("1", "replaced-it", [=10=]); replaced=1 } 1
END { exit 1-replaced }' file.txt
还要注意 the cat
is useless(还有 sed
,通常是任何标准的 Unix 命令,除了烦人的 tr
)。
AWK 等价物是:
awk '!sub(/1/,"replaced-it") {print; exit 1} 1' file.txt
如果替换不成功:打印并以状态1退出;否则打印。
我正在尝试调整来自 的答案,该答案添加了控制流以提供匹配状态代码:
cat file.txt | sed 's/1/replaced-it/;tx;q1;:x'
它在 Ubuntu 和 Alpine 上按预期工作,但在 Mac OSX (11.6
) 上失败,使用任何 shell.
sed: 1: "s/1/replaced-it/;tx;q1;:x": undefined label 'x;q1;:x'
我能找到的所有关于 sed
在 OSX 上行为不当的参考文献都是针对就地文件编辑的,这里不是这种情况。
sed 中的命令主要由换行符分隔。
| sed 's/1/replaced-it/
tx
q1
:x
'
或者:
sed -e 's/1/replaced-it/' -e 'tx' -e 'q1' -e ':x'
此外,q1
是一个 GNU sed 扩展——并非每个 sed
都支持它。它必须被删除、重构,或者您必须安装 GNU sed
.
总的来说,用awk、python或perl来写。
这是一个 Awk 重构。
awk '/1/ { sub("1", "replaced-it", [=10=]); replaced=1 } 1
END { exit 1-replaced }' file.txt
还要注意 the cat
is useless(还有 sed
,通常是任何标准的 Unix 命令,除了烦人的 tr
)。
AWK 等价物是:
awk '!sub(/1/,"replaced-it") {print; exit 1} 1' file.txt
如果替换不成功:打印并以状态1退出;否则打印。