답변

답변

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

관련 정보