Bash - скопировать строку в позиции X в конец строки - PullRequest
1 голос
/ 28 марта 2012

допустим, у меня есть следующий текст в файле letters.txt:

ABCDEFGHIJKLMNOPQRST

И я хочу скопировать позицию 2-3 (BC) в конец строки, например:

ABCDEFGHIJKLMNOPQRSTBC

Я пытался заменить \ n на позицию 2-3 плюс \ n, но это не работает.Пример:

sed -r "~ s/\n/\^(.{1})(.{2})\n/" letters.txt > letters_new.txt 

Как мне это сделать, используя bash?Я искал ответ, но не смог его найти.

Ответы [ 3 ]

2 голосов
/ 28 марта 2012
TEXT=ABCDEFGHIJKLMNOPQRSTBC
echo $TEXT${TEXT:1:2}

Секретный соус bash описан в Расширенном руководстве по написанию сценариев , вот его Строковый раздел .

0 голосов
/ 28 марта 2012

Это может работать для вас:

echo "ABCDEFGHIJKLMNOPQRST" | sed 's/.\{1\}\(.\{2\}\).*/&\1/'
ABCDEFGHIJKLMNOPQRSTBC

или более просто:

echo "ABCDEFGHIJKLMNOPQRST" | sed 's/.\(..\).*/&\1/'
ABCDEFGHIJKLMNOPQRSTBC
0 голосов
/ 28 марта 2012

, если вы принимаете awk, очень короткий однострочный может выполнить эту работу:

kent$  echo "ABCDEFGHIJKLMNOPQRST"|awk 'BEGIN{FS=""}$0=$0$2$3'  
ABCDEFGHIJKLMNOPQRSTBC
...