tee를 사용하여 파일에 문자열을 추가하고 이를 다른 파일의 패턴 대체용으로 사용

tee를 사용하여 파일에 문자열을 추가하고 이를 다른 파일의 패턴 대체용으로 사용

다음 코드가 있습니다.

cat file | grep example | sed 's/http/https/' >> report.txt

해당 명령의 출력은 다음과 같습니다.

https://example.com/page/index.html

이렇게 하면 HTTPS가 포함된 링크가 파일에 추가됩니다. 그러나 동일한 출력이 두 번째 파일의 "URL"을 대체하고 싶습니다.

두 번째 파일의 내용:

TEXT TEXT
TEXT

URL

TEXT TEXT

두 번째 파일에서 원하는 변경 사항:

TEXT TEXT
TEXT

https://example.com/page/index.html

TEXT TEXT

이것이 가능한가?

추신: 실제로는 단순한 고양이가 아니라 명령을 시작하는 업로드 프로세스이기 때문에 명령을 다시 반복할 수 없습니다.

답변1

참고로 다음은 필요하지 않으며 cat혼자서도 grepsed수 있습니다.

sed '/URL/!d;s/http/&s/'

어쨌든, 단일 출력 라인을 생성하는 일련의 명령을 실행한다고 가정하면 다음을 수행할 수 있습니다.

... | tee -a report.txt | sed 's|[\&/]|\\&|g;s|.*|s/URL/&/g|' | sed -f- -i infile.json

이는 출력을 추가할 report.txt뿐만 아니라 파이프 하여 명령 sed으로 변환한 sed다음 파일을 내부에서 sed편집하는 다른 명령으로 파이프됩니다..json

답변2

이것은 짧은 질문에 대한 짧은 대답입니다:

cat file | grep URL | sed 's/http/https/' | tee -a report.txt | while read $LINE; do
    sed --in-place -e "s·URL·$LINE·" thejsonfile.json
done

·스크립트 의 세 개를 모두 sed에 포함되지 않은 문자로 바꾸 거나 (가운데 점) $LINE으로 남겨두세요 .·

while read편집: 방금 다른 질문을 통해 성능 및 기타 이유로 인해 루프 에 파이프를 연결하는 것이 나쁜 습관으로 간주된다는 것을 배웠습니다 . 그러면 당신의 일이 끝날 것입니다. 그러니 여기에 남겨 두겠습니다.

답변3

sed -n '/example/s/http/&s/p' file | tee -a report.txt |\
sed -e 'G;s/$/./;G;s/$/wq/;h;s|.*|/URL/c|;G' | ed -s - json_file

첫 번째 출력을 기반으로 코드를 작성 ed하고 이를 사용하여 json 파일을 편집합니다.

관련 정보