![답변](https://linux55.com/image/36231/%EB%8B%B5%EB%B3%80.png)
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