![sed는 소문자 및 대문자 문자열을 대체합니다.](https://linux55.com/image/140927/sed%EB%8A%94%20%EC%86%8C%EB%AC%B8%EC%9E%90%20%EB%B0%8F%20%EB%8C%80%EB%AC%B8%EC%9E%90%20%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%84%20%EB%8C%80%EC%B2%B4%ED%95%A9%EB%8B%88%EB%8B%A4..png)
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
이름이 지정된 파일 (공백, 줄 바꿈 또는 탭 포함)이 있는 경우 변수를 인용하는 것을 잊지 마십시오 . 나는 또한 -i
GNU 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