gpt4 book ai didi

bash - 在unix中用sed反转四个字母的长度

转载 作者:行者123 更新时间:2023-11-29 08:53:11 25 4
gpt4 key购买 nike

如何使用 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])(?!=[a-z0-9])分别是negative lookbehind和negative lookahead

可以缩短为

perl -pe 's/(?<![a-z0-9])[a-z0-9]{4}(?!=[a-z0-9])/reverse $&/gie'

它使用 e将 Perl 代码放在替换部分的修饰符。这种形式适合轻松改变要反转的单词的长度

关于bash - 在unix中用sed反转四个字母的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46870285/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com