it-swarm-ko.tech

여러 파일에 텍스트 줄 추가

그래서, 저는 디렉토리에 많은 파일을 가지고 있고, 각 파일에 텍스트 한 줄을 삽입해야합니다. 기본적으로 다음과 같은 형식이 있습니다.


<VirtualHost *:80>
        ServerAdmin [email protected]
        DocumentRoot /var/www/test1
        ServerName test1.local
        ServerAlias test1
        <Directory "/var/www/test1">
                Options All
                AllowOverride All
        </Directory>
</VirtualHost>

그리고 닫기 전에 줄을 삽입하고 싶습니다

</ VirtualHost>
10
gabe.

이 같은:

sed 's/<\/VirtualHost>/yourlinehere\n<\/VirtualHost>/'

공장. 많은 파일에서이 명령을 반복하려면 다음과 같이 할 수 있습니다.

for i in *; do sed -i 's/<\/VirtualHost>/yourlinehere\n<\/VirtualHost>/' "$i"; done

@ChrisDown 덕분에 아마도 더 낫지 만 테스트되지 않았습니다.

find . -type f -print0 | while IFS= read -r -d '' filename;\
do sed -i 's/<\/VirtualHost>/yourlinehere\n<\/VirtualHost>/' $filename;\ 
done
10
lcipriani

Perl이 마음에 들지 않으면 다음을 시도하십시오.

Perl -pi'*.old' -e 's(</VirtualHost>(Your stuff here\n</VirtualHost>)' myfile

-i 스위치는 .old 확장자로 이전 파일을 저장하고 현재 파일로 인쇄합니다.

2
gvkv

원하는 편집이 다소 복잡하다면 "ex"(명령 줄 vi)를 사용할 수도 있습니다. 예를 들어, ""의 한 인스턴스에 대해서만 삽입을 수행하려고합니다.

다음과 같은 쉘 스크립트가 작동 할 수 있습니다.

for FILENAME in *.whatever  # Need a criteria to glob, or a list of names
do
    ex -s $FILENAME << END_EDITS
/^<\/VirtualHost>/
O " capital-o, not zero
text to insert goes here
.
w!
q
END_EDITS
done

이 접근 방식은 "ex"의 이점을 제공합니다 : elaboarte 패턴 및 '커서 이동'이있는 위치 찾기. 패턴을 찾은 다음 다음 인스턴스를 찾은 다음 삽입을 수행하는 등의 작업을 수행 할 수 있습니다. 또는 단순히 삽입하는 대신 텍스트를 변경할 수 있습니다. 또는 범위간에 변경할 수 있습니다. "ex"를 사용하면 "."를 사용할 수 있습니다. 현재 줄로.,/^ somepatter/s/blah/foo/작동합니다.

2
Bruce Ediger

다음 한 줄 코드를 사용하여 파일의 지정된 위치에 한 줄 또는 여러 줄을 삽입 할 수 있습니다.이 경우 'VirtualHost'앞에 있습니다. 코드는 기본적으로 주어진 디렉토리와 하위 디렉토리 내에서 파일 이름 (모든 파일에 텍스트를 삽입하려는 경우 *. * 일 수 있음)을 검색합니다. 찾은 파일 내에서 'VirtualHost'패턴을 검색합니다. 패턴을 찾은 후 첫 줄\n 두 번째 줄\n 기타\n\VirtualHost로 바꿉니다. 'VirtualHost'는 교체 용 텍스트의 일부입니다. 그렇지 않으면 손실됩니다.

find directory/ -name filename -print | xargs sed -i 's|VirtualHost|firstline\nsecondline\notherlines\nVirtualHost|g'
0
Oufie