검색을 수행하고 파일에서 교체하는 데 사용하는 GNU/Linux 명령 줄 도구는 무엇입니까?
문제
검색을 수행하고 파일에서 교체하는 데 사용하는 GNU/Linux 명령 줄 도구는 무엇입니까?
검색 텍스트 및 교체를 Regex 형식으로 지정할 수 있습니까?
해결책
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 [접미사],-내 장소 [= 접미사제자리에 파일 편집 (확장자가 제공되는 경우 백업 제작)
-r, -regexp-extended스크립트에서 확장 정규 표현식을 사용하십시오.
그만큼 freebsd 버전은 또한 이러한 옵션을 지원합니다. 그만큼 netbsd 그리고 OpenBsd 버전 만 지원합니다 -r
.
다른 팁
이를 위해 Perl이 발명되었습니다.
perl -pi -e 's/foo/bar/g;' *.txt
단일 따옴표의 정상적인 s /// 패턴. 다음과 같이 백업을 유지할 수 있습니다.
perl -pi.bak -e 's/foo/bar/g;' *.txt
또는 파이프 라인 :
cat file.txt | perl -ne 's/foo/bar/g;' | less
그러나 그것은 정말로 더 많은 SED의 직업입니다.
루비를 Perl의 대안으로 간주하십시오. 그것은 대부분의 Perl의 One-Liner Commandline Args를 훔쳤습니다 (-i
, -p
, -l
, -e
, -n
) 및 자동 세트 $_
당신은 Perl이하는 것처럼 당신을 위해, 그리고 많은 정수의 선을 가지고 있습니다. 또한 Ruby의 구문은 Perl 또는 SED보다 더 편안하고 읽거나 쓰기가 더 쉽습니다. (또는 당신의 취향에 따라 다르지 않습니다.)
ruby -pi.bak -e '$_.gsub!(/foo|bar/){|x| x.upcase}' *.txt
vs.
perl -pi.bak -e 's/(foo|bar)/\U\1/g' *.txt
대부분의 경우 한 라이너를 다룰 때 성능은 경량 SED 또는 헤비급 Perl 또는 Heaveier-Weight Ruby를 사용하는지 여부를 관리하기에 충분하지 않습니다. 글을 가장 쉽게 사용하십시오.
sed, 스트림 편집기, 예, Regex를 사용합니다.