sed 및 변수

sed 및 변수

나는 이 질문을 여러 번 받았지만 해결책이 나에게 효과가 없다는 것을 알고 있습니다.

1_all과 2_ovo라는 2개의 파일이 있습니다. 그들은 모두 항목 목록을 포함합니다. 1_all에는 2_ovo의 항목과 기타 항목이 포함되어 있습니다. 2_ovo와 동일한 1_all의 모든 항목을 삭제해야 합니다. 이것이 내가 가진 것입니다:

for i in 2_ovo
   do
sed -i "/$i/d" 1_all
done

따라서 2_ovo에서 값을 가져오고 1_all에서 값을 삭제합니다.

sed의 변수는 큰따옴표로 처리해야 한다는 것을 알고 있지만 이 명령은 전혀 아무 작업도 수행하지 않습니다. $i를 실제 값으로 바꾸면 해당 값이 예상대로 파일에서 제거됩니다. 어떤 아이디어가 있나요?

답변1

루프를 실행하려면 파일을 읽어야 합니다.

for i in `cat /path/to/file/2_ovo`
do
    sed -i "/$i/d" 1_all
done

답변2

sedwith 옵션을 사용하면 각 줄부터 시작하는 대신 파일을 리터럴 줄 목록으로 사용하여 일치 및 일치를 반전할 수 있습니다 .2_ovogrep-Fxf 2_ovo-v

grep -vFxf 2_ovo 1_all > 3_only_the_rest

관련 정보