grep에서 sed 스트림을 분해하거나 sed에 grep을 작성하시겠습니까?

grep에서 sed 스트림을 분해하거나 sed에 grep을 작성하시겠습니까?

다음과 같은 파일이 있습니다.

file.foo
file2.foo
file.bar
file3.foo

이제 로 끝나는 줄만 반환하고 싶지만 with 가 .foo있는 모든 항목의 이름을 바꾸고 싶습니다 . 이 경우에는 완전히 건너뛰는 것을 의미합니다 . 나는 무엇을 해야 합니까?fileblagfile.bar그냥 sed를 사용하세요? 제가 현재 하고 있는 일은 기본적으로 다음과 같습니다.

grep '\.foo$' input | sed -e's/file/blag/'

하지만 grep을 삭제하고 싶습니다.

이 질문은 이 답변을 위해 수행한 파이프라인을 대략적으로 기반으로 합니다.

답변1

또는 미러링하고, 기본 인쇄를 끄고, 대체하고, 원하는 줄만 인쇄합니다.

sed -n  's/file/blag/; /\.foo$/p' < input

또는 원하는 행을 필터링하세요.첫 번째, 교체하고 인쇄하십시오.

sed -n '/\.foo$/ { s/file/blag/; p }' < input

답변2

grep나는 다음을 사용하여 파이프를 제거 할 수 있었습니다.sed!d

sed -e'/\.foo$/!d' -e's/file/blag/' ./input

대답은 다음에서 비롯됩니다.이 포럼 게시물

답변3

다음으로 끝나는 줄을 선택 .foo하고 다음 줄에서만 바꾸기를 수행합니다.

sed '/\.foo$/{s/file/blag/}'

시험:

$ echo $'file.foo\nfile2.foo\nfile.bar\nfile3.foo' | sed '/\.foo$/{s/file/blag/}'
blag.foo
blag2.foo
file.bar
blag3.foo

답변4

sed -n 's/\(file\)\(.*\)\(\.foo\)/blang\2\3/p' input.txt > output.txt

(출력 파일에 쓰기)

또는

sed -i 's/\(file\)\(.*\)\(\.foo\)/blang\2\3/' input.txt 

(파일 내 교체)

관련 정보