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
추신: 테스트 폴더를 확인하여 작동하는지 확인하세요!
설명
원래:
- 고양이 파일 map.txt.
- 각 줄을 읽고 교체할 단어
$oldw
와 교체할 단어를 알아보세요$neww
. - 각 쌍에 대해 이미 사용하고 있던 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