【发布时间】:2020-07-26 16:29:30
【问题描述】:
使用 POSIX sed 或 awk,我想复制每对相邻字符中的每个第二个字符,并在新行上列出每个新形成的对。
example.txt:
abcd 10001.
预期结果:
ab
bc
cd
d
1
10
00
00
01
1.
到目前为止,这就是我所拥有的(注意,如果在 macOS 上省略“--posix”)。出于某种原因,在 \2 之前添加文字换行符 不会产生预期的结果。删除第一组并使用\1 具有相同的效果。我错过了什么?
sed --posix -E -e 's/(.)(.)/&\2\
/g' example.txt
abb
cdd
100
000
1..
【问题讨论】:
-
--posix(仅限 GNU 的选项)和-E选项没有意义,因为-E在 GNU sed 和 OSX/BSD sed 中启用 ERE,但 ERE 不是t POSIX 支持。也不要假设如果您使用--posix运行脚本,它只使用 POSIX 指定的语法。这意味着非 POSIX 扩展被禁用,但它可能仍然依赖于 POSIX 根本没有定义的行为,因此它在其他 POSIX seds 中不起作用。基本上,如果您在单行输入或输出上做的不止s/old/new/g,那么您可能正在使用非便携式结构 -
与 sed 相比,我没有意识到 awk 的便携性。