줄이 많은 파일에서로 시작하는 줄을 삭제하고 싶습니다 HERE IT IS
.
명령 줄 도구 만 사용하여이 작업을 수행하려면 어떻게해야합니까?
줄이 많은 파일에서로 시작하는 줄을 삭제하고 싶습니다 HERE IT IS
.
명령 줄 도구 만 사용하여이 작업을 수행하려면 어떻게해야합니까?
답변:
시도 sed
:
sed -i '/^HERE IT IS/d' <file>
경고 :-i
스위치를 사용하는 경우 백업을 수행하는 것이 좋습니다 sed
.
sed -i.bak '/^HERE IT IS/d' <file>
원본 파일은 그대로 유지되고 <file>.bak
수정 된 파일은 그대로 유지됩니다 <file>
.
sed -i 's/^HERE IT IS/HERE IT IS\n/' <file>
sed '/^HERE IT IS/G' 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
bash
저를 LOL로 만들었 기 때문에
printf "%s\n" "$line"
$ line을 인용하여 공백을 보존하고 에코 문제를 피합니다 (특수 문자 해석 등). 추가 할 필요 --
도 없습니다.
IFS=
와 -r
, 나뿐만 아니라 갈 모든 방법과 견고 할 수 있습니다.
그렙
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
[print(l, end = "") for l in open(fil).readlines() if not re.match("HERE IT IS", l)]
있지만보다 효율적이지 않습니다 startswith
. [print(l, end = "") for l in open(f).readlines() if not l.startswith("HERE IT IS")]
목록에서 출력을 생성하지 않는 방법 이 궁금합니다 .
vim
과 같이 사용할 수 있습니다 .vim '+g/^HERE IT IS/d' +wq test.txt
;)