패턴이 나타날 때마다 텍스트 줄을 추가해야 합니다. 나는 이것이 필요하다:
pattern1
pattern2
이렇게 생겼어
pattern1
pattern2
new line data here
새 행 데이터는 항상 모드 2 이후에 나타납니다. 패턴2는 항상 동일하고, 패턴2는 100번 이상 나타납니다. 226행과 2858행 사이에 모드 2가 표시되는 경우에만 이 작업을 수행하고 싶습니다. 나는 내부 수정을 하고 파일의 다른 어떤 것도 지우지 않고 이 모든 작업을 수행하고 싶습니다. (이미 테스트 중에 한 번 수행했으며 다시 수행하고 싶지 않음)
업데이트 - 패턴에 특수 문자가 포함되어 있으므로 더 정확해야 합니다. 그래서 실제로 이것을 변경하고 있습니다.
pattern1
pattern2 { text; };
이와 관련하여
pattern1
pattern2 { text; };
new data { text; text; text; };
따라서 특수 문자가 포함된 패턴 2가 일치되고 특수 문자가 포함된 새 데이터 행이 추가됩니다. 이런 사실은 미리 밝혀졌어야 했습니다. 혼란을 드려 죄송합니다.
답변1
vim으로 할 수 있어요!
vim file.txt -c "226,2858g/pattern2/normal onew line data here" -c "wq"
다음을 통해 대화형으로 이 작업을 수행할 수도 있습니다.
vim file.txt
:226,2858g/pattern2/normal onew line data here
:wq
어느 쪽이냐나나는 이것을 선호하지만 vim에 익숙하지 않기 때문에 첫 번째 것을 선호한다면 이해할 것입니다.
이 두 가지 모두 vim 명령을 호출하여 작동합니다 :global
.
*:g* *:global* *E147* *E148*
:[range]g[lobal]/{pattern}/[cmd]
Execute the Ex command [cmd] (default ":p") on the
lines within [range] where {pattern} matches.
이 예에서 범위는 226-2858행이고 패턴은 "pattern2"이며 ex 명령은 다음과 같습니다.
normal onew line data here
그것이 하는 일은 "내가 입력할 때 다음 키를 입력하라"는 뜻인 "일반"이라고 불리는 것입니다. "o" 키(o)를 입력하면 현재 행 아래에 새 행이 추가되고 삽입 모드로 들어갑니다. 그런 다음 삽입 모드에서 "New line of data here"라는 텍스트가 파일에 삽입됩니다.
다음 명령은 -c "wq"
(w)rite와 (q)uit입니다.
귀하의 "패턴"이 정규식을 사용하는 경우 아마도 끝까지 읽어야 할 것입니다.이 멋진 페이지패턴 일치가 올바른지 문제를 해결하는 데 도움이 됩니다.
답변2
sed "226,2858s/^\(pattern2.*\)/\1\nnew line data here/g" -i data.txt