![스트림 편집을 사용하여 bash 출력 변경](https://linux55.com/image/206048/%EC%8A%A4%ED%8A%B8%EB%A6%BC%20%ED%8E%B8%EC%A7%91%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20bash%20%EC%B6%9C%EB%A0%A5%20%EB%B3%80%EA%B2%BD.png)
bash를 다음과 같이 호출하면 bash|sed 's/a/b/g'
bash가 "a"를 출력할 때마다 "b"로 대체됩니다.
$ bash|sed 's/a/b/g'
$ echo aaa
bbb
$ exit
그러나 다음과 같은 대체 항목을 추가하면:
bash|sed 's/a/b/g'|sed 's/c/d/g'`
모든 출력은 bash 호출을 종료한 후에만 나타납니다.
$ bash|sed 's/a/b/g'|sed 's/c/d/g'
$ echo a
$ echo c
$ exit
b
d
두 개의 파이프가 하나의 파이프와 동일하게 동작하도록 하는 방법이 있습니까? 아니면 한 번의 호출로 여러 스트림 대체를 수행할 수 있는 방법이 있습니까? 또한 애초에 왜 다르게 동작하는 걸까요?
왜 이런 일을 하겠습니까?
다음과 같이 IP 주소를 자동으로 편집하는 bash 호출을 작성하고 싶습니다.
bash|sed -r 's/([0-9]{1,3}\.){3}[0-9]{1,3}(\/[0-9]{1,2})?/███.███.███.███/g'
잘 작동하지만 ip-v6와 같은 추가 대체를 수행하려는 경우 더 이상 작동하지 않습니다.
이것이 내가 시도한 것입니다.
bash|sed -r 's/([0-9]{1,3}\.){3}[0-9]{1,3}(\/[0-9]{1,2})?/███.███.███.███/g' | sed -r 's/([0-9a-f]{0,4}:){5,7}[0-9a-f]{0,4}(\/[0-9]{1,2})?/████:████:████:████:████:████:████:████:████/g'