여러 문자열 패턴을 찾는 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

명시적으로 전달해야 합니까? 하나의 파일에 그러한 파일 이름이 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

관련 정보