
다음 코드가 있습니다.
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
혼자서도 grep
할 sed
수 있습니다.
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 파일을 편집합니다.