표준 입력에서 읽기 위해 sed를 어떻게 얻습니까? [복제]


91

나는 노력하고있다

grep searchterm myfile.csv | sed 's/replaceme/withthis/g'

그리고 점점

unknown option to `s'

내가 도대체 ​​뭘 잘못하고있는 겁니까?

편집하다:

주석에 따르면 코드는 실제로 정확합니다. 내 전체 코드는 다음과 유사했습니다.

grep searchterm myfile.csv | sed 's/replaceme/withthis/g'
# my comment

그리고 어떤 이유로 내 의견이 sed에 대한 입력으로 제공되는 것으로 보입니다. 아주 이상한.


파일을 replacename 대신 'withthis'로 바꾸시겠습니까?
Teja

2
아니, 그건 당신이하려는 게 아니야. 뭔가 빠진 것이 있습니다.
Ignacio Vazquez-Abrams 2012

6
내 가장 좋은 추측은 실제 경우 /에는 replaceme또는 withthis. 시도 : 's#replaceme#withthis#g'.
cababunga 2012

4
당신이 잘못하고있는 한 가지는 당신이 실행하고있는 것을 정확히 보여주지 않는 것입니다. 보여 주신 코드는 괜찮습니다. 실행중인 작업에 문제가 있습니다. 어고, 당신은 당신이 실행하는 것을 우리에게 보여주지 않습니다. 대부분의 경우 볼 수없는 것을 디버깅 할 수 없습니다. 때때로, 우리는 운이 좋아서 정확하게 추측 할 수 있지만, 추측하거나 운이 좋을 필요는 없습니다.
Jonathan Leffler 2012

1
grep의 쓸모없는 사용. 나오지도, 당신은 할 수 있습니다 : SED '/ SEARCHTERM / S / 패턴 / 교체 / g'myfile.csv
윌리엄 Pursell

답변:


120

--expression 옵션 사용

grep searchterm myfile.csv | sed --expression='s/replaceme/withthis/g'

+ SOaddict, 이것은 stdout으로 출력하고 있으며 myfile.csv를 변경하지 않습니다.
Josiah

1
파일의 내부 업데이트를 원하면 내 대답이 그 문제를 적절하게 해결한다고 생각합니다.
Wes

보이는 것은 무엇이든 grep 'x' y | sed 'z'리팩토링 할 수 있습니다 sed '/x/z' y. 참조 의 쓸모를 사용 grep.
tripleee

39

"-e"를 사용하여 sed-expression 지정

cat input.txt | sed -e 's/foo/bar/g'

1
"-e"를 사용하여 sed-expression을 지정하는 방법이 sed가 stdin에서 읽을 수 있는지 궁금합니다. sed는 기본적으로 stdin에서 읽습니까?
Tim

1
예. 대부분의 유닉스 도구와 마찬가지로 sed입력 파일이 없으면 stdin 에서 읽습니다.
umläute

감사. 입니다 -e필요? 없이 작동합니다 -e. 사용 목적이 무엇인지 궁금합니다 -e. 감사.
Tim

2
나는 OP의 질문을 이해하지 못합니다. echo foo | sed 's/foo/bar/g'없이 작동 -e하고 출력하기에 의해, bar. 그래서 나는 그의 질문을 놓쳤을 것입니다.
Tim

-e스크립트 문이 하나만있는 경우 지정할 필요가 없습니다 . 두 개가 있으면 sed -e '/foo/!d' -e 's//bar/g'또는 sed 's/foo!d;s//bar/g'(또는 세미콜론 대신 줄 바꿈을 사용하여) 이라고 말할 수 있습니다 .
tripleee

6

sed파일 대신 stdin에서 catch를 수행 하려면 -e.

이렇게 :

curl -k -u admin:admin https://$HOSTNAME:9070/api/tm/3.8/status/$HOSTNAME/statistics/traffic_ips/trafc_ip/ | sed -e 's/["{}]//g' |sed -e 's/[]]//g' |sed -e 's/[\[]//g' |awk  'BEGIN{FS=":"} {print $4}'

2

파일 내에서 텍스트의 내부 업데이트를 수행하려는 경우 이것은 제 생각에 추론하기가 훨씬 쉽습니다.

grep -Rl text_to_find directory_to_search 2>/dev/null | while read line; do  sed -i 's/text_to_find/replacement_text/g' $line; done


-16
  1. 다음을 사용하여 파일 열기 vi myfile.csv
  2. 프레스 Escape
  3. 유형 :%s/replaceme/withthis/
  4. 입력 :wq하고 누르십시오.Enter

이제 파일에 새 패턴이 생깁니다.


11
OP는 vim이 아닌 sed를 사용하여 수행하는 방법을 알고 싶었습니다.
Noe Nieto

1
Noe가 말한 것. 또한 vim 솔루션은 (쉽게) 스크립팅 할 수 없기 때문에 sed 대안보다 열등합니다.
weberc2 2014
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.