모든 것을 고려하여, 전체 파일을 삼키고는 갈 수있는 가장 빠른 방법이 될 수 있습니다.
기본 구문은 다음과 같습니다.
sed -e '1h;2,$H;$!d;g' -e 's/__YOUR_REGEX_GOES_HERE__...'
파일이 엄청 나면 전체 파일을 고 블링하는 것이 옵션이 아닐 수 있습니다. 그러한 경우, 여기에 제공된 다른 답변은 작은 메모리 공간에서 작동하도록 보장되는 맞춤형 솔루션을 제공합니다.
다른 모든 핵 및 슬래시 상황의 경우, -e '1h;2,$H;$!d;g'
원래 sed
정규 표현식 인수 앞에 붙는 것만으로도 작업이 완료됩니다.
예 :
$ echo -e "Dog\nFox\nCat\nSnake\n" | sed -e '1h;2,$H;$!d;g' -re 's/([^\n]*)\n([^\n]*)\n/Quick \2\nLazy \1\n/g'
Quick Fox
Lazy Dog
Quick Snake
Lazy Cat
무엇을 -e '1h;2,$H;$!d;g'
합니까?
1
, 2,$
, $!
부품 라인이 직접 다음 명령이 실행 라인이 한도를 지정자입니다.
1
: 첫 줄만
2,$
: 두 번째부터 시작하는 모든 줄
$!
: 마지막 이외의 모든 줄
확장되어 N 라인 입력의 각 라인에서 발생합니다.
1: h, d
2: H, d
3: H, d
.
.
N-2: H, d
N-1: H, d
N: H, g
g
명령 라인에서 지정된 것이 아니라, 위의 d
명령은 특별한 조항이있다 " 시작 다음주기를. "이것은 방지 g
마지막을 제외한 모든 라인에서 실행.
각 명령의 의미는 다음과 같습니다.
- 제
h
다음 H
각 광고 카피들로의 입력 라인을 상기 sed
집의 보류 공간 . (임의의 텍스트 버퍼를 생각하십시오.)
- 그런
d
다음 각 행을 버려서 해당 행이 출력에 기록되지 않도록합니다. 그러나 홀드 공간 은 유지됩니다.
- 마지막으로, 맨 마지막 줄에
g
로부터 모든 라인의 축적 복원 보류 공간을 그 때문에 sed
(오히려 라인 한번에 한 방식에 비해) 전체 입력에서의 정규 표현식을 실행할 수 있으며, 따라서 할 수있다 에 일치합니다 \n
.