![sed 및 변수](https://linux55.com/image/119574/sed%20%EB%B0%8F%20%EB%B3%80%EC%88%98.png)
나는 이 질문을 여러 번 받았지만 해결책이 나에게 효과가 없다는 것을 알고 있습니다.
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
sed
with 옵션을 사용하면 각 줄부터 시작하는 대신 파일을 리터럴 줄 목록으로 사용하여 일치 및 일치를 반전할 수 있습니다 .2_ovo
grep
-Fxf 2_ovo
-v
grep -vFxf 2_ovo 1_all > 3_only_the_rest