2012-03-28 8 views
1

の最後には、のは、私がletters.txtと呼ばれるファイルに次のテキストを持っているとしましょうこれはBashの位置Xにおけるコピー文字列ライン

ABCDEFGHIJKLMNOPQRSTBC 

\ nを\ 2-3位プラス\ nに置き換えようとしましたが、動作しません。例:

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

私はbashを使ってどのようにすることができますか?私は答えを探しましたが、何も見つけることができません。 awkのはあなたによって受け入れられ

+0

あなたが正規表現にマッチした行の先頭を使用します( '^')と2位の文字を含む一致グループを追加することができ-3を 'echo'を使って行の最後に追加します。正規表現は '^。(。{2})'(マッチライン開始、任意の文字、その後の任意の2つの文字)となります。あなたは 'cut -c 2-3 'を使って2つの文字を得ることさえできます。 –

答えて

0

場合、非常に短いワンライナーは、仕事をすることができます:

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

のbashの秘密のソースは、ここで、Advanced Bash-Scripting Guideに記述されているが、そのString sectionです。

+1

OPは、位置2〜3の文字の**コピー**を文字列の末尾に付加することを望んでいます。したがって、実際には '$ TEXT $ {TEXT:1:2}'になるはずです。 –

+0

+1正しい技術を使用しています。仕様に合わせて詳細を編集しました。 – ams

+0

なお、これをファイルに適用するには、 'TEXTを読んでいる間に'を使います。 echo "$ {TEXT} $ {TEXT:1:2}"; done ams

0

このあなたのために働くかもしれない:

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

以上:

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