줄이 많은 파일에서로 시작하는 줄을 삭제하고 싶습니다 HERE IT IS
.
명령 줄 도구 만 사용하여이 작업을 수행하려면 어떻게해야합니까?
답변
시도 sed
:
sed -i '/^HERE IT IS/d' <file>
경고 :-i
스위치를 사용하는 경우 백업을 수행하는 것이 좋습니다 sed
.
sed -i.bak '/^HERE IT IS/d' <file>
원본 파일은 그대로 유지되고 <file>.bak
수정 된 파일은 그대로 유지됩니다 <file>
.
답변
아주 좋은 이외에 grep
와 sed
당신이받은 답변, 여기에 같은 일을 할 수있는 다른 도구는 다음과 같습니다
-
몇 가지 펄 방법 :
perl -ne '/^HERE IT IS/ || print' file > newfile perl -ne 'print if !/^HERE IT IS/' file > newfile perl -ne 'print unless /^HERE IT IS/' file > newfile
-i
파일을 편집하기 위해 스위치를 예제에 추가 할 수 있습니다 .perl -i.bak -ne '/^HERE IT IS/ || print' file
-
(둔한 사람
awk '!/^HERE IT IS/' file > newfile
GNU
awk
(awk
Linux 의 기본값 )의 최신 버전 (4.1.1 이상 )도 파일을 제자리에서 편집 할 수 있습니다.gawk -i inplace '!/^HERE IT IS/' file
-
쉘 (
bash
,zsh
,ksh
, 아마 다른 사람). 이것은 어리석은 일이지만 할 수는 있지만 다른 도구가 더 좋습니다.while IFS= read -r line; do [[ $line =~ ^"HERE IT IS" ]] || printf "%s\n" "$line" done < file > newfile
답변
grep
그것들을 걸러내는 데 사용 합니다. 예를 들면 다음과 같습니다.
grep -v "^HERE IT IS" infile > outfile
그런 다음 outfile을 다시 infile로 이동하십시오.
답변
sed
확실히 갈 길입니다.
@heemayl 명령을 약간 수정하면 패턴 참조의 I로 인해 동일한 사례가 패턴에 사용되는지 여부에 관계없이 줄을 삭제할 수 있습니다.
sed -i '/HERE IT IS/Id' <file>
이 작업을 수행하려는 디렉토리에 여러 파일이 있으면 찾은 파일과 결합 할 수 있습니다.
find . -maxdepth 1 -type f -exec sed -i.bak '/HERE IT IS/Id' {} +
maxdepth 옵션은 이것이 디렉토리로 재귀하지 않음을 의미합니다.
답변
다른 파이썬 옵션 :
#!/usr/bin/env python3
[print(l, end = "") for l in open(f).readlines() if not l.startswith("HERE IT IS")]
여기서 f는 따옴표 사이의 파일 경로입니다.
답변
그렙
grep -P '^(?!HERE IT IS)' file
(?!HERE IT IS)
네거티브 lookahead 어설 션은 정규식 엔진 이 문자열 다음에 오는 경우에만 모든 줄 시작 경계 ( 일반적으로와 일치^
)를 일치 시킵니다.HERE IT IS
파이썬
#!/usr/bin/python3
import sys
fil = sys.argv[1]
with open(fil) as f:
for line in f:
if not line.startswith('HERE IT IS'):
print(line, end="")
스크립트를 파일에 저장 한 script.py
다음 터미널에서 아래 명령을 통해 실행하십시오.
python3 script.py infile
답변
Ex 모드에서 Vim을 사용할 수 있습니다 :
ex -sc 'g/^HERE IT IS/d' -cx file
-
g
글로벌 검색 -
d
지우다 -
x
저장하고 닫습니다