에서 첫 번째 줄을 삭제 SED :내가 폴더에있는 모든 파일의 첫 번째 줄을 제거 할 파일
$ sed -i '' '/^uuid/d' *
은 잘 작동하고 uuid으로 시작하는 모든 줄을 제거합니다. 의 삭제해야 할 첫 번째 줄에 단지 하나가 파일의 일부 이후 UUID로 시작하면
지금 내가 첫 번째 라인을 제거하여 스크립트를 향상시키고 자하는 여러 UUID가 있습니다. 그래서 지금은 다음과 같이 명령을 향상 :
$ sed -i '' '1{/^uuid/d;}' *
가 같은 버전을 이제이 명령은 폴더에 첫 번째 파일 만 작동하고 나는 간단한을 실행하는 경우에도 (단지 첫 번째 줄을 제거)
$ sed -i '' '1d' *
는 여전히 첫 번째 파일에 영향을 미칩니다.
왜 이런가요?
저는 Mac에서 (BSD 버전의 sed를 이해하게되었습니다) 그리고 Brew를 통해 gnu-sed 버전을 설치하려고 시도했습니다. $ brew install gnu-sed --with-default-names
, 행운이 없습니다. john1024 나는 -s
옵션을 테스트하지만, 그것을 사용하는 방법을 잘 한에 의해 코멘트 제안으로 :
, 그리고 sed delete first line in files
UPDATE 1을 봤. 내가 man sed
을 검사 할 때 내가 잘못 여기서 뭔가를해야하므로
$ sed -s '1d' ./* sed: illegal option -- s
나는 -s & --seperate
옵션을 찾을 수 있습니다.
업데이트 2 : 좋아, 진행 ... find . -iname '*.yml' -exec sed -i '' -e '1{/uuid/d;}' {} \;
트릭을 수행하지만 난 어떤 도움이나 지침 sed: can't read : No such file or directory
감사를 말하는 오류 메시지가!
: OLA
(리눅스) 나오지 GNU에서이 문제를 해결하기 위해, 하나는 나오지도 별도로 "파일을 고려하는 말은'-s' 옵션을 사용하지 않고 하나의 연속적인 긴 물줄기보다. " BSD sed에 익숙한 사람은 Mac에 비슷한 옵션이 있는지 알려줘야 할 것입니다. – John1024
bsd sed가 -s 스위치를 지원하지 않는다는 공통적 인 비밀이있는 것처럼 보이기 때문에 다른 친구들은 모든 파일을 처리하기 위해 일종의 루프를 사용할 것을 제안합니다 (예 :'find ...... | sed'또는'find .. .exec sed'). 'foldername/*'또는'./*'을 시도해 볼 수도 있고 운이 좋을 수도 있습니다. ... https://forums.freebsd.org/threads/50187/ 및 https://stackoverflow.com/questions/19590980/multiple-replacements-with-one-sed-command –
알겠습니다. './iname '을 찾는다. * .yml'| sed -e '1 {/^uuid/d;}''와'ls * .yml | sed -e '1 {/^uuid/d;}''둘 다 변경되지 않은 디렉토리에있는 파일의 목록 만 생성합니다. – ola