2012-03-31 6 views
2

"MYWORD"키워드가 파일에서 발견되기 전에 한 줄을 삽입하는 sed 스크립트가 있습니다. 내 스크립트는 다음이 이후스크립트의 여러 파일에 sed 사용

sed -e '/MYWORD/ i\MY NEW LINE TO BE INSERTED' <inputFilename >outputFilename 

단지 내가이 삽입 디렉토리에있는 모든 파일에서 발생하는이 내 스크립트를 변경하는 방법을 하나 개의 파일에 발생합니다?

+0

예제 코드가 실제로 단일 파일에서 작동한다고 말하는 것입니까? – Graham

답변

1

nosid가 말한대로 -i 옵션을 사용하여 파일을 편집 할 수 있습니다. -i의 정확한 사용법을 확인하려면 운영 체제의 매뉴얼 페이지를 읽으십시오. 그런 다음 파일에 쉘 식별하는 스크립트와 행동의 약간에 나오지도 포장 할 수 있습니다 말했다

for this in foo*.txt; do 
    sed -i'' -e 'your-sed-script' "$this" 
done 

, 나는 당신의 삽입 방법은 작동 확인, 또는 안정적으로 적어도 일이 아니에요. FreeBSD와 OS X에서 테스트를했는데 전혀 작동하지 않았습니다. 라인을 삽입하는 나의 일반적인 전략은 대신 awk를 사용하는 것이다. 따라서 (예를 들어)

for this in foo*.txt; do 
    awk '/MYWORD/{print "Extra line of text goes here."} 1' "$this" > "$this.$$" 
    mv "$this.$$" "$this" 
done 

AWK 선 여기 (기본 정규식 sed 디폴트 반면 확장 된 정규식)/MYWORD/검색. 찾으면 "추가"텍스트를 먼저 인쇄합니다. 그런 다음 "1"은 현재 행을 인쇄하는 "true"로 평가합니다. 효과는 MYWORD 앞에 줄에 "추가"텍스트를 삽입하는 것입니다.

스크립트가 아님을 유의하십시오. 수정되지 않은 파일의 낭비, 파이핑 및 이름 변경 awk의 종료 값에 따라 임시 파일을 "mv"로 선택하거나 파일이 변경되었는지를 확인하기 위해 cmp을 사용할 수 있습니다. 남은 임시 파일을 정리하는 등의 작업을 수행 할 수 있습니다. .