2

ファイル(file.dat)からのみ最初に出現した文字列をgrepし、別のファイル(出力)から読み取ることで置き換えたいと思いました。「出力」というファイルがあり、例として「AAA T 0001」が含まれています。

#!/bin/bash
procdir=`pwd`

cat output | while read lin1 lin2 lin3
do
  srt2=$(echo $lin1 $lin2 $lin3 | awk '{print $1,$2,$3}')
  grep -m 1 $lin1  $procdir/file.dat | xargs -r0 perl -pi -e 's/$lin1/$srt2/g'
done

基本的に私が望んでいたのは次のとおりです。最初のインスタンスで文字列「AAA」がファイル「file.dat」からgrepさ​​れたときはいつでも、「AAA」の隣の2番目と3番目の列を「T 0001」に置き換えたいのですが、最初の列「AAA」はそのままにしておきます。上記のスクリプトは基本的に機能しません。基本的に、「s/$lin1/$srt2/g」内では「$lin1」変数と $srt2 変数は認識されません。

例:

私のfile.datには行があります

AAA D ---- シティ カントリー

私が欲しいのは:

AAA T 0001 シティ カントリー

どんなコメントでも大歓迎です。

4

3 に答える 3

0

検索する$s文字列と置換する文字列を に配置すると$r、次のようになりませんか?

perl -i -pe'
   BEGIN { ($s,$r)=splice(@ARGV,0,2) }
   $done ||= s/\Q$s/$r/;
' "$s" "$r" file.dat

(存在する場合は最初のインスタンスを置き換えます)

于 2013-03-05T21:55:54.713 に答える