複数の文字列パターンを検索するUnix sedコマンド

複数の文字列パターンを検索するUnix sedコマンド

ここでのシナリオは、値を変更する必要があるということです"$$file_name="。下記のように、ファイルに約150のファイル名があります。

例: $$file_name=abc.bbb.ccc to_be ---> $$file_name=abc.bbb.cccV1

現状のまま:

$$a=abc.txt
$$file_name=abc.ddd.aaa
$$directory=/uasdua/asdsas

$$a=c.txt
$$file_name=ac.dd.ac
$$directory=/uasdua/asdsas

$$a=b.txt
$$file_name=ee.d.a
$$directory=/uasdua/asdsas
.
.
.
.
.
.
$$a=b.txt
$$directory=/uasdua/asdsas
$$file_name=e.d.a

になる:

$$a=abc.txt
$$file_name=abc.ddd.aaaV1
$$directory=/uasdua/asdsas

$$a=c.txt
$$file_name=ac.dd.acV1
$$directory=/uasdua/asdsas

$$a=b.txt
$$file_name=ee.d.aV1
$$directory=/uasdua/asdsas
.
.
.
.
.
.
$$a=b.txt
$$directory=/uasdua/asdsas
$$file_name=e.d.aV1

これが私が試したことです。

select NAME from xxx where DATE='07/12/1999' > Name_file

#version will be same for that day
FILE_VERSION=`db2 -x "select version from xxx where DATE='07/12/1999'"` > version_name
FILE_VER=`cat version_name | head -1`

while read filename
 do
    FILE_NAME1=`echo ${filename}${FILE_VER}`
    sed -f pattern.txt input > output
done < file_name11

パターン.txt

echo "$filename"
echo "$FILE_NAME1"
s/${filename}/${FILE_NAME1}/g ---> If I hardcode this one its not working..the value is not replaced..
s/ee.d.a/ee.d.aV1/g --> this is working

明示的に渡す必要がありますか? 1つのファイルにそのようなファイル名が150個ありますか?


答え1

これを達成する方法は次のとおりです。

$ sed -e '/^$$file_name/ s|$|V1|' AS_IS

「$file_name..」で始まる文字列を探します。これらの文字列に対して検索と置換を実行します。は$文字列の終わりなので、実際にV1一致する各文字列にaを追加します。これらの結果を次のファイルにリダイレクトできます。

$ sed -e '/^$$file_name/ s|$|V1' AS_IS > to_be

答え2

あなたはそれを使用することができます

sed -i -e 's/\$\$file_name=.*/&V1/' file.txt   

答え3

このソリューションをお試しください。私のために働く:

sed -i 's/\$\$file_name.*/&V1/' foobar

foobar入力ファイルはどこにありますか?

答え4

sedで「コマンドファイル」を使用するには、次のものをファイルに入れることができます

s/\$\$file_name=.*/&V1/

実行プロセスは次のとおりです。

sed -f pattern.txt <AS_IS >to_be

関連情報