sed +는 두 번째로 일치하는 단어만 대체합니다.

sed +는 두 번째로 일치하는 단어만 대체합니다.

우리는 다음과 같은 파일을 가지고 있습니다:

more /tmp/file

Allow,Deny
Allow,Deny

두 번째로 일치하는 단어만 변경하려고 합니다(Allow,Deny를 Deny,Allow로 교체).

그래서 우리는 그랬어

sed 's/Allow,Deny/Deny,Allow/1'  /tmp/file

Deny,Allow
Deny,Allow

하지만 그것은 그들을 대체합니다

그리고 예상되는 결과는 다음과 같습니다.

Allow,Deny
Deny,Allow

두 번째로 일치하는 단어만 바꾸는 방법

답변1

또 다른 sed 솔루션.

sed '0,/Allow/!{0,/Allow/s/Allow/Deny/}' /tmp/file

여기서는 첫 번째 항목을 일치시킨 Allow다음 첫 번째 항목의 대체 항목을 무시하고 Allow다음 줄을 바꿉니다.

아이디어를 제공하기 위해 다음은 우리가 사용한 이후 두 번째와 네 번째를 대체합니다.N;

sed '0,/Allow/!{N;/Allow/s/Allow/Deny/}'

또는 다음을 사용하십시오 awk.

awk '/Allow/{c++; if (c==2) { sub("Allow","Deny")}}1'

일치시킨 Allow다음 카운터를 유지합니다 c. 이것이 2두 번째 발생과 일치하면 이를 대체합니다.

답변2

두 번째로 일치하는 단어만 변경합니다(Allow,Deny를 Deny,Allow로 교체).

sed해결책:

샘플 tmp_file:

Allow,Deny
Allow,Deny
Allow,Deny
Allow,Deny

sed ':a;N;$!ba; s/Allow,Deny/Deny,Allow/2' tmp_file

산출:

Allow,Deny
Deny,Allow
Allow,Deny
Allow,Deny

관련 정보