2016-11-20 1 views
1

에서 생성 된 다른 라인 전체 라인을 교체 :찾기 라인, I로 시작하는 스크립트가 중첩 루프

sed 's!'$1'!'$2'!g' file.txt > new.txt ; 

$ 1, $ 2 변수와 변수 세 번째입니다을 $ 3 스크립트에서 나중에 사용

sed "s!><!> $3 <!4" newer.txt > newest.txt 
:

./script.sh variable variable2 variable3 

스크립트의 다음 부분은 텍스트 파일에 세 번째 변수를 추가, 스크립트는이 형식으로 실행

지금 내가하고 싶은 것은 "newest.txt"(한 줄로/<> "/ html에있는 문자 포함)의 출력을 사용하고 variable2를 사용하여 식별 된 다른 파일의 행을 다음과 같이 바꾸는 것입니다. 경기.

이것은 내가 가지고있는 것입니다.하지만 전체 줄을 바꾸는 것처럼 보이지는 않습니다.

for i in `cat newest.txt` ; 
do 
sed '/$2/s/.*/$i/' new.txt > final.txt 
done 

저는 Solaris에서 sed를 사용할 때 -i 스위치를 허용하지 않습니다. Sed, awk 또는 bash가 바람직합니다.

미리 감사드립니다. 파일이 강력한 될 것부터가 @ mklement0에 파일이나 여러 라인 파일의 입력 내용에

sed -e "/$2/r newest.txt" -e "/$2/d" new.txt > final.txt 

또는

sed -e "/$2/r newest.txt" -e '//d' new.txt > final.txt 

감사를 기반 아프게하지 않습니다으로 읽어 r 명령을 사용하여

+0

예제 데이터와 예상 출력은 어떻습니까? –

답변

2

대체 내용이 결과에 영향을 미칠 수 있으며 d 명령에 대한 패턴을 재사용 할 수 있음을 지적하기 위해 :

보여주는 다양한 사례 :

$ echo -e 'XYZ\nABC' > f1 
$ r=$(<f1) 

$ sed "/$s/s/.*/$r/" ip.txt 
sed: -e expression #1, char 12: unterminated `s' command 

$ sed "/$s/c$r" ip.txt 
sed: -e expression #1, char 10: unknown command: `A' 

$ sed -e "/$s/r f1" -e '//d' ip.txt 
foo 
XYZ 
ABC 
XYZ 
ABC 
123 

주 : 대체 문자열이 /

$ echo '/XYZ/' > f1 
$ r=$(<f1) 

$ sed "/$s/s/.*/$r/" ip.txt 
sed: -e expression #1, char 11: unknown option to `s' 

$ sed "/$s/c$r" ip.txt 
foo 
/XYZ/ 
/XYZ/ 
123 

$ sed -e "/$s/r f1" -e '//d' ip.txt 
foo 
/XYZ/ 
/XYZ/ 
123 

처럼 그리고 여러 라인 문자를 포함

$ cat ip.txt 
foo 
bar 
baz 
123 

$ s='ba' 
$ echo 'XYZ' > f1 
$ r=$(<f1) 

$ sed "/$s/s/.*/$r/" ip.txt 
foo 
XYZ 
XYZ 
123 

$ sed "/$s/c$r" ip.txt 
foo 
XYZ 
XYZ 
123 

$ sed -e "/$s/r f1" -e '//d' ip.txt 
foo 
XYZ 
XYZ 
123 

경우 일부 sed 버전 sed "/$s/c\\$r" ip.txtc\을해야 할 수도 있습니다의 사용법입니다.명령. 이중 따옴표 안에 \을 이스케이프 처리해야합니다.

+1

고마워요 Sundeep, 대접했습니다! :) – rickyboy