나는 독자들의 데이터베이스를 가지고 있고 그들에게 책을 빌려주고 그 데이터베이스에 쓰고 싶습니다.
예:
리더
753 Leonardo DaVinci [email protected] 321654987 Lended Books:
grep "Leonardo" database_readers.txt | sed "s/\(.*\):/\1: Narnie/"
이 명령을 사용하면 행 끝에 Narnie 책이 추가된 행만 출력됩니다. 그런데 파일의 행을 어떻게 변경할 수 있습니까?
어떤 제안이라도 보내주셔서 감사합니다
답변1
sed -i -e '/Leonardo/ s/$/ Narnie/' database_readers.txt
이는 sed
내부 편집 옵션( -i
)을 사용하여 정규식과 일치하는 모든 줄을 검색 Leonardo
하고 $
줄 끝 앵커( )를 단일 공백 및 단어로 바꿉니다 Narnie
. 이는 Narnie
일치하는 줄의 끝에 효과적으로 추가됩니다 .
정규식 검색 패턴에 주의하세요. 예상보다 많은 줄을 일치시키기 쉽습니다. 첫 번째 테스트:
sed -n -e '/Leonardo/ s/$/ Narnie/p' database_readers.txt
이 -n
옵션을 p
후행 옵션과 함께 사용하면 변경된 행만 인쇄됩니다 s///
. sed
하다아니요sed -i
파일에서 변경되지 않은 모든 행을 제거하려는 경우가 아니면 이 옵션을 사용하십시오.
어쨌든 예상보다 많은 줄이 인쇄되면 Leonardo
또는 Leonardo DaVinci
( ^753[[:space:]]\+
줄 시작 부분의 숫자가 고유 ID라고 가정)로 변경하고 예상한 줄만 바뀔 때까지 다시 시도하십시오.
그보다 더 복잡한 경우 일반 텍스트 파일 대신 sqlite
(또는 심지어 mysql
) 사용을 고려할 수도 있습니다. postgresql
또는 많은 라이브러리 모듈이 포함된 언어를 사용하여 perl
플랫 파일 데이터베이스에서 작동합니다.