2008-10-01 2 views

답변

46
sed 's/a.*b/xyz/g;' old_file > new_file 

GNU sed는 (당신은 아마이있는) 더 다재다능 : 여기

sed -r --in-place 's/a(.*)b/x\1y/g;' your_file 

그 옵션에 대한 간단한 설명입니다

-i [SUFFIX] - in-place [= SUFFIX] 파일을 제자리에 편집합니다 (확장자가 제공된 경우 백업합니다)

-r, --regexp-extended 스크립트에서 확장 정규 표현식을 사용하십시오.

FreeBSD 버전도 이러한 옵션을 지원합니다. NetBSDOpenBSD 버전은 -r 만 지원합니다.

sed에 대해 자세히 알아 보려면 Cori님께 서 this tutorial을 제안하셨습니다.

+0

확장 정규식을 허용하는 -r 스위치에 대해 알지 못했습니다. 또한 -i는 --in-place에 대한 바로 가기입니다. –

+0

자세한 내용을 원하면 위의 cori의 링크를 사용하십시오. sed는 perl afaik보다 더 가볍습니다 – MattSmith

+0

그게 좋은 시작이에요 .. 그리고 튜토리얼 링크에 감사드립니다! – Swanand

26

펄은이를 위해 발명되었다 :

perl -pi -e 's/foo/bar/g;' *.txt 

모든 정상들 /// 패턴을 그 작은 따옴표.

perl -pi.bak -e 's/foo/bar/g;' *.txt 

또는 파이프 라인 :이 같은 뭔가 백업을 유지할 수

cat file.txt | perl -ne 's/foo/bar/g;' | less 

을하지만 정말 더 나오지 일이다.

5

sed, 스트림 편집기, 예, 정규식을 사용합니다.

6

Perl 대신 Ruby를 고려하십시오. 그것은 펄의 한 줄의 명령 행 인수 (-i, -p, -l, -e, -n) 및 자동 설정 당신을 위해 $_ 펄 수행하고 정규식 장점을 많이 가지고 같이 대부분을 훔친. 또한 Ruby의 구문은 Perl이나 sed보다 읽기 쉽고 쓰기가 쉽습니다. (또는하지, 당신의 취향에 따라 다릅니다.)

ruby -pi.bak -e '$_.gsub!(/foo|bar/){|x| x.upcase}' *.txt

대 한 라이너를 다루는 대부분의 경우

perl -pi.bak -e 's/(foo|bar)/\U\1/g' *.txt

성능이 걱정하는 문제의 충분하지 않습니다 당신이 가벼운 sed 또는 중량급 Perl 또는 더 무거운 무게의 루비를 사용하는지 여부. 가장 쉬운 것을 쓰십시오.

+1

유용한 예를 제공해 주셔서 감사합니다! 나는 그것이 다음과 같이 단순화 될 수 있다고 생각한다 :'ruby -pi.bak -e 'gsub (/ foo | bar /) {| x | x.upcase} '* .txt' (예를 들어,'$ _'을 제거하십시오). –

관련 문제