나는 해당 줄에서 지정된 일치 정규식의 세 번째(또는 더 일반적으로 n번째) 발생을 대체하기 위해 sed를 사용할 것입니다. 지금까지는 첫 번째 작업만 수행할 수 있습니다.
$cat file
# Golden dictionary is a versatile multi purpose reference
# Copyright (C) 2004-2008 A
# Copyright (C) 2008-2015 B
# Copyright (C) 2015-2016 C
지금까지 나는 단지
$ cat file| sed -E '0,/copy/I s//No-&/'
# Golden dictionary is a versatile multi purpose reference
# No-Copyright (C) 2004-2008 A
# Copyright (C) 2008-2015 B
# Copyright (C) 2015-2016 C
게임 3만 있는 경우 어떻게 해야 하나요?
답변1
ed를 사용하면 대소문자를 구분하지 않는 세 번째 "복사본" 앞에 "No-"를 붙이면 다음과 같습니다.
ed -s file <<< $'/[Cc][Oo][Pp][Yy]/\n//\n//\ns//No-&/\nw\nq' > /dev/null
명령은 다음과 같습니다:
/[Cc][Oo][Pp][Yy]/
-- 대소문자를 구분하지 않고 "copy:"를 수동으로 검색합니다.//
-- 검색을 두 번 반복합니다.s//No-&/
-- 마지막 일치 항목을 "No-" 접두사로 바꿉니다.w
-- 변경된 파일을 디스크에 쓰기q
——편집 종료
sed를 사용하면 변경하려는 줄 번호를 찾기 위해 몇 가지 사전 작업을 수행할 수 있습니다.
sed -i $(grep -in copy file |awk -F: 'NR==3 { print $1 }')'s/copy/No-&/i' input
왼쪽에서 오른쪽으로 작업하세요.
-i
-- GNU sed에 대한 내부 편집 옵션$( ... )
-- "copy"와 일치하는 세 번째 줄 번호 찾기grep -in copy file
-- 대소문자를 구분하지 않고 "copy"라는 단어를file
찾아 일치하는 줄 번호를 보고 합니다.awk -F: 'NR==3 { print $1 }'
-- grep 출력의 라인 3에서 콜론으로 라인을 분할하고 열 1(라인 번호)을 보고합니다.
s/copy/No-&/i
-- "복사"를 "복사 안 함"으로 바꾸세요. 대소문자를 구분하지 않습니다.
답변2
를 사용하여 awk
문자열이 포함된 줄 수를 세고 Copyright
세 번째 줄에 도달하면 해당 줄에서 첫 번째 항목에 대해 교체를 수행합니다.
awk '/Copyright/ && ++n == 3 { sub("Copyright", "No-&") } { print }' file
&
바꾸기에 사용된 것은 정규식이 일치하는 모든 것을 의미합니다. 이 경우 Copyright
삽입할 문자열 이 됩니다 . 이 (사용 )은 예를 &
들어에도 적용됩니다 .sed
첫 번째 블록 이전의 조건,
/Copyright/ && ++n == 3
Copyright
문자열을 현재 줄과 일치 시킵니다 . 일치하는 항목이 있으면 n
증가됩니다. 증분 값이 n
3과 같으면 블록이 실행됩니다.
시험:
$ cat file
# Golden dictionary is a versatile multi purpose reference
# Copyright (C) 2004-2008 A
# Copyright (C) 2008-2015 B
# Copyright (C) 2015-2016 C
# Golden dictionary is a versatile multi purpose reference
# Copyright (C) 2004-2008 A
# Copyright (C) 2008-2015 B
# Copyright (C) 2015-2016 C
(파일은 귀하의 파일과 동일하지만 내용이 반복됩니다)
$ awk '/Copyright/ && ++n == 3 { sub("Copyright", "No-&") } { print }' file
# Golden dictionary is a versatile multi purpose reference
# Copyright (C) 2004-2008 A
# Copyright (C) 2008-2015 B
# No-Copyright (C) 2015-2016 C
# Golden dictionary is a versatile multi purpose reference
# Copyright (C) 2004-2008 A
# Copyright (C) 2008-2015 B
# Copyright (C) 2015-2016 C