Unix sed 命令查找多个字符串模式

Unix sed 命令查找多个字符串模式

这里的场景是我需要替换"$$file_name="值..我在一个文件中有大约 150 个文件名,如下所述..

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

AS_IS:

$$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

我是否需要明确传递它..我在一个文件中有 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

相关内容