sedまたはawkを使用して.txtファイルから数文字を除くすべての行に文字列を追加する方法

sedまたはawkを使用して.txtファイルから数文字を除くすべての行に文字列を追加する方法

xid.txt次のテキストファイルがあります。

xid: SC48028 id: artf398444
xid: indv1000 id: indv24519
xid: SC32173 id: artf398402
xid: SC21033 id: artf398372
xid: 1001 id: tracker4868
xid: wiki1000 id: wiki10709
xid: proj1234 id: proj12556

'SC48028'、 'SC32173'...などの前に 'PT_'文字列を追加する必要があります。文字列「SC...」は、「AC...」または「DL..」などの任意の組み合わせで開始できます。

希望の出力:

xid: PT_SC48028 id: artf398444
xid: indv1000 id: indv24519
xid: PT_SC32173 id: artf398402
xid: PT_SC21033 id: artf398372
xid: 1001 id: tracker4868
xid: wiki1000 id: wiki10709
xid: proj1234 id: proj12556

上記の出力が表示されたら、「i」、「p」、「w」、および「numeric」で始まる文字列の前に「PT_」を挿入しないでください。私の要件を満たすために、sedで挿入/追加を使用していくつかの基本的なコマンドを試しました。

答え1

そしてアッ:

awk '$2~/^[A-Z][A-Z]/{ $2="PT_"$2 }1' xid.txt

出力:

xid: PT_SC48028 id: artf398444
xid: indv1000 id: indv24519
xid: PT_SC32173 id: artf398402
xid: PT_SC21033 id: artf398372
xid: 1001 id: tracker4868
xid: wiki1000 id: wiki10709
xid: proj1234 id: proj12556

  • $2~/^[A-Z][A-Z]/- 2番目のフィールドが2つの大文字で始まる場合

またはsed方法:

sed -i 's/^\(xid:[[:space:]]*\)\([A-Z]\{2\}[^[:space:]]*\)/\1PT_\2/' xid.txt

答え2

sed オプション

sed -i -e 's/[A-Z][A-Z]/PT_&/' file

どこ

  • -i所定の位置で編集
  • -e注文の実行

関連情報