如何反转四个长度的字母sed
?
例如:
the year was 1815.
反向至:
the raey was 5181.
这是我的尝试:
cat filename | sed's/\([a-z]*\) *\([a-z]*\)/\2, \1/'
但它并没有按照我的预期工作。
不确定是否可以在所有情况下使用 GNU sed 来完成此操作。如果_
不会立即出现在四个字母单词之前/之后,您可以使用
sed -E 's/\b([a-z0-9])([a-z0-9])([a-z0-9])([a-z0-9])\b/\4\3\2\1/gi'
\b
是单词边界,单词定义是任何字母、数字或下划线字符。所以\b
将确保仅匹配整个单词而不是单词的一部分
$ echo 'the year was 1815.' | sed -E 's/\b([a-z0-9])([a-z0-9])([a-z0-9])([a-z0-9])\b/\4\3\2\1/gi'
the raey was 5181.
$ echo 'two time five three six good' | sed -E 's/\b([a-z0-9])([a-z0-9])([a-z0-9])([a-z0-9])\b/\4\3\2\1/gi'
two emit evif three six doog
$ # but won't work if there are underscores around the words
$ echo '_good food' | sed -E 's/\b([a-z0-9])([a-z0-9])([a-z0-9])([a-z0-9])\b/\4\3\2\1/gi'
_good doof
具有环视支持的工具适用于所有情况
$ echo '_good food' | perl -pe 's/(?<![a-z0-9])([a-z0-9])([a-z0-9])([a-z0-9])([a-z0-9])(?!=[a-z0-9])/$4$3$2$1/gi'
_doog doof
(?<![a-z0-9])
and (?!=[a-z0-9])
分别是负lookbehind和负lookahead
可以缩短为
perl -pe 's/(?<![a-z0-9])[a-z0-9]{4}(?!=[a-z0-9])/reverse $&/gie'
它使用e
将 Perl 代码放置在替换部分的修饰符。这种形式适合轻松改变要反转的单词长度
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)