텍스트 파일이 있는데 == Changelog ==
해당 줄과 그 뒤의 모든 내용이 삭제되는 새 파일을 만들고 싶습니다.
답은 어딘가에 있을 것이라고 확신하고 그것을 찾으려고 노력했지만 지금은 머리가 핑핑 돌고 있습니다. sed, awk, csplit, ...
?
답변1
awk를 사용하세요:
awk '/Changelog/{exit}1' file > newfile
아니면 sed를 사용하세요:
sed -n '/Changelog/q;p' file > newfile
답변2
나는 다음을 사용할 것이다 sed
:
sed '/== Changelog ==/,$d' file > newfile
이 구문은 위의 jasonwryan이 제안한 구문보다 덜 효율적이지만 대부분의 사람들이 더 읽기 쉽습니다. sed에는 잘 알려진 두 가지 용도가 있습니다. 기본 검색 및 바꾸기 s///
와 범위 기반 작업입니다 /beginpattern/,/endpattern/X
. 여기서 X는 sed 작업입니다.디에일레트,에스검색 및 바꾸기... 세미콜론(;)이 포함된 구문은 프로그래밍에 더 적합하고 이해하기 어렵습니다.
답변3
csplit -f newfile -n1 infile /==\ Changelog\ ==/
이는 생성 ./newfile0
및./newfile1
(GNU csplit
또는 POSIXly 사용 ./newfile[12]
). 첫 번째에는 일치하는 줄이 처음으로 나타나기 전의 모든 줄이 포함되고 == Changelog ==
, 두 번째에는 해당 줄 이후의 모든 줄이 포함됩니다.