sed는 스트림 편집기와 유사하며 개방형 시스템 호출을 사용하여 파일을 엽니다.

sed는 스트림 편집기와 유사하며 개방형 시스템 호출을 사용하여 파일을 엽니다.

저는 여러 항목이 포함된 추적 파일을 읽는 소프트웨어를 사용하고 있습니다. 각 항목은 다음 형식으로 되어 있습니다.

<...>,<...>,<64 character string>

내 경우에는 64자 문자열이 모두 "0"으로 구성되어 있습니다.

다음 항목이 포함된 파일을 해당 프로그램에 공급할 수 있는 sed 파일 스트림(stdin이 아닌, 개방형 시스템 호출을 사용하여 열린 파일 스트림)과 같은 것을 가질 수 있습니까?

<...>,<...>,&

프로그램은 "&"를 64개의 "0"으로 대체합니다. 프로그램을 실행하기 전에 추적 파일 자체에서 sed를 사용할 때의 문제점은 시스템에서 사용 가능한 공간이 제한되어 있다는 것입니다.

현재 계획은 ptrace를 사용하여 읽기 시스템 호출을 가로채서 프로그램이 일반 파일을 읽는 것처럼 보이도록 만드는 것입니다. 이것이 좋은 생각입니까?


(편집하다)
프로그램은 파일을 한 번만 구문 분석합니다.

답변1

sed 's/,[^,]*$/,\&/' <file | program /dev/stdin

이는 프로그램이 명령줄에 파일 이름을 지정해야 하며 파일에서 앞뒤로 검색을 시도하지 않는다고 가정합니다(표준 입력은 일반적으로 검색할 수 없습니다).

특수 파일에는 /dev/stdin프로세스의 표준 입력 스트림 내용이 포함됩니다. 위에서 우리는 file프로그램이 일반적으로 표준 입력 스트림을 읽지 않더라도 수정된 내용을 프로그램에 보내기 위해 명령줄에서 표준 Unix 파이프를 사용하여 이 사실을 활용했습니다 .

sed이 표현식은 각 줄의 마지막 쉼표 뒤의 모든 내용을 로 대체합니다 .file&

관련 정보