sed는 소문자 및 대문자 문자열을 대체합니다.

sed는 소문자 및 대문자 문자열을 대체합니다.

sed를 사용하여 각 인스턴스를 교체하려고 합니다.오래된파일에새로운. 지금은 소문자 문자열에서 작동하지만 일부 대문자 문자열을 바꾸려면 필요합니다. 예를 들어 교체오래된그리고새로운. sed가 이 작업을 수행할 수 있다는 것을 알고 있지만 제대로 수행할 수 없습니까?

for file in .; do
  cat $file
  sed 's/old/new/g' $file | tee $file
done

답변1

i명령의 / I플래그 를 알고 계십니까 s(GNU 확장임에도 불구하고)?

답변2

"old"를 "new"로 바꾸고 "OLD"를 "NEW"로 바꾸려면 sed에게 다음 두 가지 작업을 수행하라고 지시하면 됩니다.

for file in ./*; do
  cat "$file"
  sed -i -e 's/old/new/g; s/OLD/NEW/g' "$file"
done

some filename이름이 지정된 파일 (공백, 줄 바꿈 또는 탭 포함)이 있는 경우 변수를 인용하는 것을 잊지 마십시오 . 나는 또한 -iGNU sed 확장을 추가했습니다.GNU /i 플래그 확장을 사용할 수 있음을 나타냅니다., sed에게 버퍼에 의존하지 않고 파일을 편집하도록 지시합니다 tee.

답변3

펄을 사용할 수 있습니다:

$ cat file
old news
OLD news
old Old oLD news
older news
$ perl -pe 's{(old)}{ ($tmp = $1) =~ tr/OLDold/NEWnew/; $tmp }ieg' file
new news
NEW news
new New nEW news
newer news

s///검색 및 바꾸기에는 연산자를 사용하고, 바꾸기에서는 연산자를 사용합니다 .음역문자는 "이전"에서 "새"로 바뀌며 개별 문자의 대소문자는 그대로 유지됩니다. 이는 "old"와 "new"의 문자열 길이가 동일하기 때문에 작동합니다.

$1읽기 전용 값이므로 임시 변수를 사용해야 합니다 .

답변4

문자열의 크기가 동일하면 다음 명령이 모두 작동합니다.

<infile sed    'y/OLDold/NEWnew/' >outfile
<infile tr     'OLDold'  'NEWnew' >outfile
        sed -i 'y/OLDold/NEWnew/' infile

관련 정보