Обратная строка с 5 последовательными символами - PullRequest
1 голос
/ 06 января 2010

Мне нужно перевернуть всю строку в тексте с 5-ю символами подряд. Например:

hello hi adams sde
abcde abs

Требуемый вывод:

olleh hi smada sde
edcba  abs

Я использовал:

sed -n 's\(a-z]\)\([a-z]\)\([a-z]\)\([a-z]\)\([a-z]\)/\5\4\3\2\1/p' 

Он переворачивает нужные строки, кроме "Адамс". Пожалуйста, помогите мне исправить это.

Ответы [ 2 ]

1 голос
/ 06 января 2010

используйте awk

awk '{
    for(i=1;i<=NF;i++) {
        if(length($i)==5) {
            v=""
            for(o=length($i);o>0;o--) {
                v=v substr($i,o,1)
            }
            $i=v
        }
    }
}1' file

выход

$ more file
hello hi adams sde
abcde abs
$ ./shell.sh
olleh hi smada sde
edcba abs
1 голос
/ 06 января 2010

Похоже, это не так много, что "Адамс" не заменен, но что ваша команда заменяет только первый соответствующий экземпляр. Попробуйте это:

sed -n 's/\([a-z]\)\([a-z]\)\([a-z]\)\([a-z]\)\([a-z]\)/\5\4\3\2\1/pg' 

Из руководства:

The s command can be followed by zero or more of the following flags:
g    Apply the replacement to all matches to the regexp, not just the first. 
(snip)
...