답변

답변

map.txt검색 문자열과 해당 대체 항목 목록이 포함된 파일이 있습니다 .

search -> replacement
bigBone -> bb
fishMarket -> fm
dogCollar -> dc
...

심볼릭 링크를 제외하고 폴더의 모든 파일에 대해 위와 일치하는 모든 문자열의 검색 및 교체를 반복적으로 수행해야 합니다. 나는 다음과 같이 한 번에 하나씩 수행하는 방법을 알고 있습니다.

$ find /some/folder -type f -exec sed -i 's/old_text/new_text/g' {} \;

위의 매핑을 사용하여 이를 대규모로 수행하려면 어떻게 해야 합니까? 내가 읽고이 질문, 그러나 잘 이해하지 못합니다.

답변1

답변

속도가 걱정되지 않는다면(일회성 작업임) 다음을 시도해 볼 수 있습니다.

cat map.txt | while read line; do
neww=${line##* };
oldw=${line%% *};
find /some/folder -type f -exec sed -i "s/$oldw/$neww/g" {} \;
done

최적이 아니라는 건 알아요... :-P

추신: 테스트 폴더를 확인하여 작동하는지 확인하세요!

설명

원래:

  1. 고양이 파일 map.txt.
  2. 각 줄을 읽고 교체할 단어 $oldw와 교체할 단어를 알아보세요 $neww.
  3. 각 쌍에 대해 이미 사용하고 있던 find 명령을 실행하십시오(이번에는 변수 대체를 허용하기 위해 큰따옴표를 확인하십시오).

매개변수 확장 정보

$oldw변수를 설정 하려면 $neww각 줄의 첫 번째 단어와 마지막 단어를 가져와야 합니다. 그렇게 하기 위해 우리는 매개변수 확장(순수한 Bash 구현)을 사용하고 있지만, 문자열의 첫 번째 단어와 마지막 단어를 얻기 위해 다른 방법(예: cut또는 awk)을 사용할 수도 있었습니다.

  • ${line##* }: 변수에서 line가장 큰 접두사(double #) 패턴을 제거합니다. 여기서 패턴은 문자( *) 뒤에 공백( )이옵니다. 그래서 우리는 마지막 단어를 line.
  • ${line%% *}: 변수에서 line가장 큰 접미사(double %) 패턴을 제거합니다. 여기서 패턴은 공백( ) 뒤에 문자( *)가 옵니다. 그래서 우리는 에서 첫 번째 단어를 얻습니다 line.

이 경우 단어는 공백으로 구분되었지만 어떤 구분 기호라도 사용할 수 있었습니다.

답변2

때로는 구성 파일에서 용어를 검색하고 바꿔야 할 때도 있습니다.

github에서 사용할 수 있는 스크립트를 작성했습니다.sandr - 검색 및 바꾸기맵을 생성/사용하고 파일 교체를 수행할 수 있습니다.

사용 예:

$ cat file
Voyez ce jeu exquis wallon, de graphie en kit mais bref. Portez ce vieux whisky au juge blond qui fume sur son île intérieure, à côté de l'alcôve ovoïde, où les bûches se consument dans l'âtre, ce qui lui permet de penser à la cænogenèse de l'être dont il est question dans la cause ambiguë entendue à Moÿ, dans un capharnaüm qui, pense-t-il, diminue çà et là la qualité de son œuvre. Prouvez, beau j
$ cat map.txt 
wallon => WALLON
se => SE
penser => PENSER
beau => BEAU
$ cat file | ./sandr -a map.txt 
Voyez ce jeu exquis WALLON, de graphie en kit mais bref. Portez ce vieux whisky au juge blond qui fume sur son île intérieure, à côté de l'alcôve ovoïde, où les bûches SE consument dans l'âtre, ce qui lui permet de PENSER à la cænogenèSE de l'être dont il est question dans la cauSE ambiguë entendue à Moÿ, dans un capharnaüm qui, penSE-t-il, diminue çà et là la qualité de son œuvre. Prouvez, BEAU j

관련 정보