도서관 데이터베이스

도서관 데이터베이스

나는 독자들의 데이터베이스를 가지고 있고 그들에게 책을 빌려주고 그 데이터베이스에 쓰고 싶습니다.

예:

리더

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플랫 파일 데이터베이스에서 작동합니다.

관련 정보