다음과 같은 파일이 있습니다.
file.foo
file2.foo
file.bar
file3.foo
이제 로 끝나는 줄만 반환하고 싶지만 with 가 .foo
있는 모든 항목의 이름을 바꾸고 싶습니다 . 이 경우에는 완전히 건너뛰는 것을 의미합니다 . 나는 무엇을 해야 합니까?file
blag
file.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
(파일 내 교체)