에
head -n 1 file > file
filehead시작 하기 전에 잘립니다 . 그러나 작성하는 경우 :
head -n 1 file 1<> file
file읽기-쓰기 모드에서 열리지 않습니다 . 그러나 head쓰기가 끝나면 파일을 자르지 않으므로 위의 줄은 작동하지 않습니다 ( head첫 번째 줄을 다시 작성하고 다른 줄은 그대로 두십시오).
그러나을 head반환 한 후 fd가 여전히 열려있는 동안 을 수행하는 다른 명령을 호출 할 수 있습니다 truncate.
예를 들어 :
{ head -n 1 file; perl -e 'truncate STDOUT, tell STDOUT'; } 1<> file
여기서 중요한 것은 truncate위 head의 첫 번째 줄 바로 다음에서 파일 내에서 fd 1에 대한 커서를 옮기는 것입니다. 우리가 필요로하지 않은 첫 번째 줄을 다시 작성하지만 해롭지는 않습니다.
POSIX 헤드를 사용하면 첫 번째 줄을 다시 쓰지 않고도 실제로 벗어날 수 있습니다.
{ head -n 1 > /dev/null
perl -e 'truncate STDIN, tell STDIN'
} <> file
여기서는 head커서 위치를 stdin으로 이동시키는 사실을 사용하고 있습니다. 하지만 head일반적으로 성능을 향상시키기 위해 큰 덩어리로 입력을 읽을 것, POSIX는 그것을 (수) 필요 seek그것을 넘어 들어갔 더라면 바로 첫 번째 줄 이후에 백업 할 수 있습니다. 그러나 모든 구현이 그렇지는 않습니다.
또는 read이 경우 대신 쉘 명령을 사용할 수 있습니다 .
{ read -r dummy; perl -e 'truncate STDIN, tell STDIN'; } <> file
cut? , iconv로 입력 파일을 변환 된 출력으로 바꾸려면 어떻게해야합니까?