2016-11-12 3 views
0

변경해야하는 10,000 개의 텍스트 파일이 있습니다.여러 파일의 첫 줄에있는 문자열을 대체하십시오.

모든 파일의 첫 줄에 url이 포함되어 있습니다. 이

eg: 
    1) http://www.supersonic.com/psychology 
    2) http://www.supersonic.com/social 
    3) http://www.supersonic.com/science 

누락 된 경우 몇 가지 파일을 실수로

모든 URL이 동일한 도메인의이다 'COM'

eg: 
1) http://www.supersonic./psychology 
2) http://www.supersonic./social 
3) http://www.supersonic.com/science 

내 작업을 확인하고 'COM'을 추가하는 것입니다 missking URL (초음속 .com)

나에게 빠르고 쉬운 방법을 제안 할 수 있습니까?

이 시도 : supersonic.com

sed -e '1s/supersonic.//supersonic.com/' * 

출력의 변화없이 supersonic./ 교체.

답변

1

코드에 매우 가깝지만, . 문자 다음에 후행 / 문자를 고려해야합니다.

당신은 이후에 다른 문자를 사용하여, 당신이 s/srchpat\/withSlash/replaceStr/'의 내부 /을 탈출해야보다는

sed -i '[email protected]\./@supersonic.com/@' * 

참고 할 수있는 -i (인플레 이스 편집) 옵션을 사용하여 현대적인 sed를 사용하고 있습니다 가정 여기서는 구분자로 s 명령을 사용합니다. 여기서는 [email protected]@[email protected]을 사용합니다. 검색 패턴에 @ 문자가있는 경우 다른 문자를 사용해야합니다. 그렇게, 처음 사용에서 이러한 경우에 대한

 sed 's\@[email protected]@' file 

를 대체 구분 탈출에 sed

일부 이전 버전이 필요합니다.

당신이, 즉 당신의 파일에 루프가 필요하고, TMP 파일을 관리 할 수 ​​있습니다 다음의 -i 옵션을 지원하지 않는 sed를 사용하는 경우

for f in *.html ; do 
    sed '[email protected]\./@supersonic.com/@' "$f" > /tmp/"$f".fix \ 
    && /bin/mv /tmp/"$f".fix "$f" 
done 

경고하지만 약 10,000 + 파일을 얘기하고, 당신이 이러한 솔루션 중 하나를 사용하기 전에 몇 가지 테스트를 수행 할 수 있습니다. 그 파일의 무작위 세트를/tmp/mySedTest/dir에 복사하고 거기에 이러한 해결책 중 하나를 실행하여 놀라움이 없는지 확인하십시오.

그리고 10,000 + 개 이상의 파일로 cmd-line MAX_SIZE를 날려 버릴 가능성이 있으므로 find 및 xargs에 대해 읽으십시오. [sed] find xargs에 대한 게시물이 많이 있습니다. 필요한 경우 체크 아웃하십시오.

ihth

2
  1. 변경된 라인을 출력하는 대신 파일을 변경하려면 -i을 사용하십시오.

  2. 당신이 정규식에 /를 사용 (또는 정규식에 \/를 사용) 할 경우 / 이외의 다른 구분 기호를 사용합니다.

  3. \.을 사용하면 글자를 정확히 일치시킬 수 있습니다. .은 무엇이든 일치합니다. sed

    sed -i~ -e '1s=supersonic\./=supersonic.com/=' * 
    

일부 버전 -i를 지원하지 않습니다.

관련 문제