awk
버전 4.1.0부터 GNU (리눅스 시스템에서 일반적으로 사용) 는 명령 줄 awk
과 함께 -i
또는 --include
명령 줄에 " 소스 라이브러리" 를 포함 할 수 있습니다 . GNU와 함께 배포되는 소스 라이브러리 awk
중 하나는 inplace
다음과 같습니다.
$ cat file
hello
there
$ awk -i inplace '/hello/ { print "oh,", $0 }' file
$ cat file
oh, hello
보시다시피 awk
코드 출력이 입력 파일을 대체합니다. there
프로그램에 의해 출력되지 않기 때문에 행 이 유지되지 않습니다.
으로 awk
파일에 스크립트, 당신은 그것을 좋아 사용합니다
awk -i inplace -f script.awk datafile
awk
변수 INPLACE_SUFFIX
가 문자열로 설정된 경우 라이브러리는 파일 이름 접미사로 원본 파일을 백업합니다.
awk -i inplace -v INPLACE_SUFFIX=.bak -f script.awk datafile
입력 파일이 여러 개인 경우 각 파일을 개별적으로 편집 할 수 있습니다. 그러나 파일 inplace=0
앞의 명령 줄 을 사용하여 파일 (또는 파일 세트)에 대한 전체 편집을 해제 할 수 있습니다 .
awk -i inplace -f script.awk file1 file2 inplace=0 file3 inplace=1 file4
위의 명령 file3
에서 제자리에서 편집되지 않습니다.
단일 파일을보다 쉽게 "제자리에서 편집"하려면
tmpfile=$(mktemp)
cp file "$tmpfile" &&
awk '...some program here...' "$tmpfile" >file
rm "$tmpfile"
입력 파일을 임시 위치에 복사 한 다음 awk
원래 파일 이름으로 리디렉션하는 동안 임시 파일에 코드 를 적용합니다 .
awk
원본 파일이 아닌 임시 파일에서 실행되는 순서대로 작업을 수행하면 원본 파일의 파일 메타 데이터 (권한 및 소유권)가 수정되지 않습니다.