Bash зависит от libc, который так стар, возможности успешной компиляции очень ограничены. Возможно, сообщению нам, что является материалом Ваша версия удара, недостает, помог бы.
В приведенных ниже примерах предполагается, что строка начинается с незаполненного символа
Можно сказать:
или
Например,
Далее также рассматриваются такие случаи, как пробелы в начале строки и множественные пробелы между двумя словами:
Соответствующим выражением на perl было бы:
Примеры:
one=word ; two=phrase ; three=$one
one="${two%"${two#?}"}${one#?}"
two="${three%"${three#?}"}${two#?}"
echo "$one $two"
> pord whrase
С sed:
echo 'one two' |sed -re 's/([^ ])([^ ]+)( +)([^ ])([^ ]+)/\4\2\3\1\5/'
tne owo
соответствует также пространствам переменных.
Возможное решение в awk
:
echo 'foo bar' | awk '{x=substr($1,1,1); y=substr($2,1,1); sub(x, y, $1); sub(y, x, $2); print $0}'
boo far
Два Вызов функции substr
будет извлекать первый символ из каждой записи, а два вызова функции sub
заменят первое появление этих символов друг на друга.