우리 모두 알고 있듯이 sed
문자열을 찾아서 바꾸는 것이 매우 효율적입니다. 예를 들어 'a'를 찾은 다음 'b':로 바꾸십시오 sed 's/a/b/g'
.
대신 다른 명령이나 셸 스크립트 로이 작업을 수행 할 수 sed
있습니까?
sed
명령 이없는 TV 용 잘린 리눅스 시스템 용 입니다. 따라서 대신 다른 명령이나 스크립트를 사용해야합니다sed 's/a/b/g'. –
우리 모두 알고 있듯이 sed
문자열을 찾아서 바꾸는 것이 매우 효율적입니다. 예를 들어 'a'를 찾은 다음 'b':로 바꾸십시오 sed 's/a/b/g'
.
대신 다른 명령이나 셸 스크립트 로이 작업을 수행 할 수 sed
있습니까?
sed
명령 이없는 TV 용 잘린 리눅스 시스템 용 입니다. 따라서 대신 다른 명령이나 스크립트를 사용해야합니다sed 's/a/b/g'. –
답변:
예,이 작업을 수행하는 다양한 방법이 있습니다. 당신은 사용할 수 있습니다 awk
, perl
또는 bash
아니라 이러한 활동을 할 수 있습니다. 일반적으로 sed
이러한 유형의 작업을 수행하는 데 가장 적합한 도구 일 것입니다.
이 샘플 데이터가 파일에 있다고 가정 해보십시오 data.txt
.
foo bar 12,300.50
foo bar 2,300.50
abc xyz 1,22,300.50
어 wk
$ awk '{gsub("foo", "foofoofoo", $0); print}' data.txt
foofoofoo bar 12,300.50
foofoofoo bar 2,300.50
abc xyz 1,22,300.50
펄
$ perl -pe "s/foo/foofoofoo/g" data.txt
foofoofoo bar 12,300.50
foofoofoo bar 2,300.50
abc xyz 1,22,300.50
위의 예제는 파일을 직접 수정할 수도 있습니다. Perl 예제는 사소한 것입니다. -i
스위치를 추가하기 만하면 됩니다.
$ perl -pie "s/foo/foofoofoo/g" data.txt
들어 awk
그것을 덜 직접적인하지만 단지 효과로 약간의 :
$ { rm data.txt && awk '{gsub("foo", "foofoofoo", $0); print}' > data.txt; } < data.txt
이 메소드는 중괄호 '{...}`로 서브 쉘을 작성합니다. 여기서 파일은 다음을 통해 파일로 경로 재 지정됩니다.
$ { ... } < data.txt
파일이 서브 쉘로 경로 재 지정되면 파일이 h 제된 후 awk
서브 쉘 STDIN으로 읽은 파일의 내용에 대해 실행 됩니다 . 그런 다음이 내용은 awk
방금 삭제 한 것과 동일한 파일 이름으로 처리되고 다시 쓰여져 효과적으로 대체됩니다.
sed
하지 I. Sed의는 이와 같은 대체 작업을 수행하기위한 적절한 도구를, 그는 분명히 더 나은 그래서 누군가에게 나쁜 생각이 일을 보여, 이러한 도구의 역할을 이해 묻는 데요, 보여주는 매우 교육이다 그들 왜. 알고있는 ppl이 너무 많은 경우, 이유를 설명하지 않고 단순히 "하지 마십시오"라고 말합니다. 하지만 왜 DV에 대한 의견을 남겨 주셔서 감사합니다.
단일 문자 대체에 대한 고전적인 대안은 tr
거의 모든 시스템에서 사용할 수 있는 명령입니다.
$ echo "foobar" | tr a b
foobbr
tr
단일 문자 대체를 위해 (단독 또는 )를 사용하는 것은 썰매 망치를 사용하여 파리를 죽이는 것과 같기 sed
때문에 실제로 이것 보다 낫습니다 .sed
perl
awk
grep
이를 위해 설계되지 않았으며 입력을 수정하지 않고 입력 만 검색합니다.
또는 일부 쉘 의 대체 기능 을 사용할 수 있습니다 . 여기 ksh
에 zsh
또는 bash
구문을 사용하십시오.
$ foo="foobar"
$ echo "${foo//a/b}"
foobbr
해결하려는 문제를 정확히 설명하면 더 구체적인 답변을 드릴 수 있습니다.
${foo//a/b}
있습니까?
echo "$foo" | sed 's/a/b/i
하거나 캐릭터 클래스를 제공해야합니다 echo ${foo//[aA]/b}
.
Ex 모드에서 Vim을 사용할 수 있습니다 :
ex -s -c '%s/a/b/g|x' file
%
모든 줄을 선택하십시오
s
대용품
g
글로벌 교체
x
저장하고 닫습니다
스트림이 아닌 파일로 작업하는 경우 표준 텍스트 편집기를 사용할 수 있습니다 ed
.
printf '%s\n' ',s/a/b/g' w q | ed file.txt
* nix에서 사용할 수 있습니다. 쉼표는 모든 라인 에서 작동하도록 ',s/a/b/g'
지시 ed
합니다 (을 사용하면 vim에 익숙 할 경우 더 익숙 할 것입니다). 그리고 나머지는 표준 검색 및 바꾸기입니다. 파일 쓰기 (저장)를 지시하고 종료하도록 지시합니다.%
w
q
sed의 -i
옵션 (및 다른 도구의 유사한 옵션)과 달리 이것은 실제로 임시 파일을 부정하지 않고 대신 파일을 편집합니다.
나는 이것을 스트림과 함께 사용할 수 있다고 생각하지 않지만 실제로는 많이 알지 ed
못하고 실제로 그 능력 (유닉스 철학이 무엇인지)이 있다면 놀라지 않을 것입니다.
$var=~s/a/b/g
,gsub(/a/,"b",var)
,var.gsub(/a/,'b')
,var.replace(/a/g,'b')
,preg_replace("/a/","b",$var)
,regsub -all a b $var
. 그 외에도 많은 도구와 언어가 일반 텍스트 문자열을 대체 할 수도 있습니다. 그래서 당신의 질문은 어떻게 든 광범위합니다.