tmp1
몇 줄을 포함 하는 tmp라는 두 개의 파일이 있습니다 tmp2
.
tmp1 파일,
1c\
datafile no. 23
2c\
datafile is ok
tmp2 파일,
3c\
datafile no. 24
4c\
datafile is ok
파일(이름 wrong_file
)이 있고 tmp 파일에서 해당 파일의 항목을 수정하고 싶습니다.
datafile no. 32
datafile is ok
datafile no. 42
datafile is ok
내 출력 파일( modified_file
)은 다음과 같습니다.
datafile no. 23
datafile is ok
datafile no. 24
datafile is ok
수동으로 수행하는 대신 마지막 tmp 파일로 실행하고 tmp 파일의 데이터를 최종 파일(출력)에 쓰는 for 루프를 사용하고 싶습니다.
열심히 노력했는데,
sed -f tmp1 wrong_file > file1
sed -f tmp2 file1 > modified_file
답변1
나는 당신이 이것을 할 수 있다고 확신합니다 :
cat ./tmp[12] | sed -f - ./wrong_file >outfile
sed
적어도 모든 스크립트 지침이 줄 번호에만 적용된다면 문제가 발생하지 않습니다. 스크립트를 개별적으로 적용할 필요가 없습니다. 모두 함께 연결하고 스크립트를 즉시 실행할 수 있습니다.
그러나 이렇게 해야 하는데 이는 노력이 중복된다는 의미입니다.여기sed
임시 파일을 먼저 작성하지 않고 대신 입력에서 변경해야 할 줄을 검색한 다음 스트림의 모든 내용을 sed
한 번에 최종 스크립트에 전달하는 스크립트의 복사본입니다 .
{ sed '/^#\.tid\.setnr/!d;=;g;G' |
paste -d'c\\\n' - - - ./addfile
} <./mainfile | sed -f - ./mainfile
출력은 다음을 기반으로 하기 때문에 여기의 샘플 데이터와 다릅니다.다른 문제. 그러나 수정 스크립트를 완전히 작성하는 것을 방지하고 모든 편집 명령을 sed
즉시 실행할 수 있는 프로세스로 보냅니다.
sed
일반적으로 프로세스는 편집 입력도 처리할 준비가 되어 있으므로 스크립트 입력도 처리할 준비가 되어 있다고 생각할 수 있습니다 . -